home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / menus / mxmnu241.zip / MARXMENU.DOC < prev    next >
Text File  |  1993-01-28  |  452KB  |  13,526 lines

  1.     
  2.     
  3.     
  4.     
  5.     
  6.      
  7.     
  8.      ===================================================================
  9.     
  10.     
  11.                        <*> Computer Tyme MarxMenu <*>
  12.     
  13.                               Reference Manual
  14.     
  15.                     Copyright 1989 - 1993 by Marc Perkel
  16.     
  17.          All Rights Reserved * Version 2.41 * Release Date: 01-28-93
  18.     
  19.      Computer Tyme * 411 North Sherman Suite 300 * Springfield, MO  65802
  20.     
  21.                   (417) 866-1222 voice * (417) 866-1665 bbs
  22.     
  23.                              Fax: (417) 866-0135
  24.     
  25.                             CompuServe: 71333,427
  26.     
  27.                               MHS: Marc @ CTyme
  28.     
  29.                   Internet: Marc @ CTyme.MHS.Compuserve.com
  30.     
  31.      ===================================================================
  32.     
  33.  
  34.     Computer Tyme * MarxMenu * Table of Contents            Page #1
  35.     -----------------------------------------------------------------
  36.     
  37.       Copyright .............................................. 1
  38.       MarxMenu License ....................................... 1
  39.       MarxMenu Warranty ...................................... 1
  40.       MarxMenu Trademarks .................................... 2
  41.       Technical Support ...................................... 2
  42.       Installation ........................................... 3
  43.       Getting Started Quick .................................. 5
  44.       Don't use this Manual - Use MarxHelp ................... 7
  45.       Common Questions and Mistakes .......................... 7
  46.       MarxMenu Features ...................................... 9
  47.       Overview of the MarxMenu System ........................ 10
  48.       What MarxMenu Does ..................................... 11
  49.       The MARX.BAT File ...................................... 12
  50.       DROPTO.BAT ............................................. 15
  51.       Support for early DOS versions ......................... 16
  52.       About Environment Variables ............................ 16
  53.       Dealing with Multiple DOS Shells ....................... 18
  54.       MarxMenu and TSR Control ............................... 19
  55.       Network Users .......................................... 19
  56.       Network Menu Strategy .................................. 20
  57.       Using TRUENAME on Networks ............................. 20
  58.       Novell Users ........................................... 21
  59.       The Novell Menu Translator ............................. 21
  60.       Logging out under Menu Control ......................... 23
  61.       Logging in with MarxMenu ............................... 24
  62.       Using Novell's Login ................................... 24
  63.       The CONFIG.SYS File .................................... 25
  64.       The AUTOEXEC.BAT File .................................. 25
  65.       The SHELL.CFG File ..................................... 27
  66.       Using a Menu File to Log In ............................ 27
  67.       Novell Search Drives ................................... 28
  68.       Novell Drive Mapping Tricks ............................ 28
  69.       Setting File Attributes ................................ 29
  70.       Novell Semaphores ...................................... 29
  71.       NetWare MHS & MarxMenu ................................. 30
  72.       Upgrading MarxMenu ..................................... 31
  73.       Customizing MarxMenu Sample Files ...................... 32
  74.       Menu Analysis .......................................... 33
  75.       Onkey Statements ....................................... 33
  76.       Popup Menus ............................................ 34
  77.       The Console ............................................ 35
  78.       Repositioning the Top Window ........................... 36
  79.       Mouse Support .......................................... 36
  80.       Starting off the Easy Way .............................. 37
  81.       About Variables ........................................ 37
  82.       Numeric Variables ...................................... 38
  83.       Boolean Variables ...................................... 38
  84.       String Variables ....................................... 39
  85.       Real Numbers ........................................... 39
  86.       Local Variables ........................................ 40
  87.       Dates .................................................. 40
  88.       Passing Parameters to Procedures ....................... 41
  89.       About Constants ........................................ 42
  90.       About Arrays ........................................... 42
  91.       About Qualifiers ....................................... 43
  92.       Pointer Variables ...................................... 44
  93.  
  94.     Computer Tyme * MarxMenu * Table of Contents            Page #2
  95.     -----------------------------------------------------------------
  96.     
  97.       Comments in Menu Files ................................. 45
  98.       The MarxMenu Compiler .................................. 46
  99.       MarxMenu Language Rules ................................ 46
  100.       Compiler Compatibility ................................. 47
  101.       A word about DOS versions .............................. 47
  102.       A word about BUGS ...................................... 48
  103.       Tips From the Master ................................... 48
  104.       Computers do Simple Tasks .............................. 49
  105.       Complex Tasks are made of Simple Tasks ................. 49
  106.       Learning Good Programming Habits ....................... 49
  107.       Use Long Names ......................................... 50
  108.       Use Comments Liberally ................................. 51
  109.       Indent Your code ....................................... 52
  110.       For Duplicate Tasks, Use Procedures .................... 53
  111.       Don't Program Yourself into a Corner ................... 53
  112.       For the POWER User ..................................... 54
  113.       Where MarxMenu is Heading .............................. 55
  114.       A word to Writers and Reviewers ........................ 55
  115.       Security Issues ........................................ 56
  116.       Keeping Users in the Menu .............................. 57
  117.       Using BREAK.SYS ........................................ 57
  118.       Using the SHELL= Command ............................... 58
  119.       Conditional Statements ................................. 59
  120.       Environment Variables used by MarxMenu ................. 60
  121.       MarxMenu Commands ...................................... 61
  122.       | ...................................................... 61
  123.       ( ...................................................... 62
  124.       ) ...................................................... 62
  125.       * ...................................................... 62
  126.       + ...................................................... 62
  127.       - ...................................................... 63
  128.       / ...................................................... 63
  129.       < ...................................................... 63
  130.       <= ..................................................... 63
  131.       <> ..................................................... 63
  132.       = ...................................................... 64
  133.       > ...................................................... 64
  134.       >= ..................................................... 64
  135.       %MenuFileName .......................................... 64
  136.       Abs .................................................... 64
  137.       Actual ................................................. 65
  138.       Alias .................................................. 65
  139.       AllowAbort ............................................. 65
  140.       AllowEsc ............................................... 66
  141.       And .................................................... 66
  142.       AnsiWindows ............................................ 66
  143.       AppendArray ............................................ 66
  144.       ApplicationMemory ...................................... 67
  145.       ArcTan ................................................. 67
  146.       AssignList ............................................. 67
  147.       BadDate ................................................ 67
  148.       Bat .................................................... 68
  149.       BatFileName ............................................ 68
  150.       BigShadow .............................................. 68
  151.       BinString .............................................. 68
  152.       Blanked ................................................ 69
  153.  
  154.     Computer Tyme * MarxMenu * Table of Contents            Page #3
  155.     -----------------------------------------------------------------
  156.     
  157.       BlankMessage ........................................... 69
  158.       BlankScreenProgram ..................................... 69
  159.       BlankTime .............................................. 70
  160.       Blink .................................................. 70
  161.       BlockBox ............................................... 71
  162.       BootDrive .............................................. 71
  163.       BoxBorderColor ......................................... 71
  164.       BoxHeader .............................................. 72
  165.       BoxHeaderColor ......................................... 72
  166.       BoxHeaderLeft .......................................... 72
  167.       BoxHeaderRight ......................................... 73
  168.       BoxFooter .............................................. 73
  169.       BoxFooterLeft .......................................... 73
  170.       BoxFooterRight ......................................... 74
  171.       BoxInsideColor ......................................... 74
  172.       Break .................................................. 74
  173.       BrightBackground ....................................... 74
  174.       BuildPath .............................................. 75
  175.       CancelListEntry ........................................ 75
  176.       CapsColor .............................................. 76
  177.       CapsLock ............................................... 76
  178.       Chain .................................................. 76
  179.       Char ................................................... 77
  180.       ChDir .................................................. 77
  181.       CleanFileName .......................................... 77
  182.       ClearLine .............................................. 77
  183.       ClearScreen ............................................ 78
  184.       ClearScreenFirst ....................................... 78
  185.       ClearScreenOnExit ...................................... 78
  186.       ClockColor ............................................. 78
  187.       ClockMode .............................................. 79
  188.       ClockPos ............................................... 79
  189.       ClosePrinter ........................................... 80
  190.       ClusterSize ............................................ 80
  191.       CmdLine ................................................ 80
  192.       CMOS ................................................... 81
  193.       ColdBoot ............................................... 81
  194.       ColorScreen ............................................ 81
  195.       ComBaud ................................................ 81
  196.       ComBlockErrors ......................................... 82
  197.       ComBlockNumber ......................................... 82
  198.       ComBlockSize ........................................... 82
  199.       ComBreakReceived ....................................... 82
  200.       ComBytesRemaining ...................................... 82
  201.       ComBytesTransferred .................................... 83
  202.       ComCD .................................................. 83
  203.       ComCDAbort ............................................. 83
  204.       ComCharReady ........................................... 83
  205.       ComDataBits ............................................ 83
  206.       ComDonePort ............................................ 84
  207.       ComDrainSendBuffer ..................................... 84
  208.       ComDTR ................................................. 84
  209.       ComEchoRecChar ......................................... 84
  210.       ComEchoSendChar ........................................ 84
  211.       ComEmptyRecBuffer ...................................... 85
  212.       ComEmptySendBuffer ..................................... 85
  213.  
  214.     Computer Tyme * MarxMenu * Table of Contents            Page #4
  215.     -----------------------------------------------------------------
  216.     
  217.       ComErrorLimit .......................................... 85
  218.       ComFileName ............................................ 85
  219.       ComFileSize ............................................ 85
  220.       ComInitPort ............................................ 86
  221.       ComLastChar ............................................ 86
  222.       ComLastLine ............................................ 86
  223.       ComParity .............................................. 86
  224.       ComPort ................................................ 86
  225.       ComProtocol ............................................ 87
  226.       ComReadChar ............................................ 87
  227.       ComReadln .............................................. 87
  228.       ComReadTimeout ......................................... 87
  229.       ComRec1kXmodem ......................................... 88
  230.       ComRecKermit ........................................... 88
  231.       ComRecXmodem ........................................... 88
  232.       ComRecYmodem ........................................... 88
  233.       ComRecYmodemG .......................................... 89
  234.       ComRecZmodem ........................................... 89
  235.       ComResult .............................................. 89
  236.       ComRI .................................................. 89
  237.       ComRTS ................................................. 89
  238.       ComSendBreak ........................................... 90
  239.       ComSend1kXmodem ........................................ 90
  240.       ComSendKermit .......................................... 90
  241.       ComSendXmodem .......................................... 90
  242.       ComSendYmodem .......................................... 91
  243.       ComSendYmodemG ......................................... 91
  244.       ComSendZmodem .......................................... 91
  245.       ComStopBits ............................................ 92
  246.       ComStripHighBit ........................................ 92
  247.       ComThisLine ............................................ 92
  248.       ComTimeout ............................................. 92
  249.       ComTotalErrors ......................................... 93
  250.       ComUseInt14 ............................................ 93
  251.       ComUseUart ............................................. 93
  252.       ComWatchCD ............................................. 93
  253.       ComWrite ............................................... 94
  254.       ComWriteln ............................................. 94
  255.       ComWriteTimeout ........................................ 94
  256.       ComXmitAbortProgram .................................... 94
  257.       ComXmitEnding .......................................... 95
  258.       ComXmitStarting ........................................ 95
  259.       ComXmitStatusProgram ................................... 95
  260.       Comment ................................................ 95
  261.       Console ................................................ 96
  262.       ConsoleBorderColor ..................................... 96
  263.       ConsoleHeaderColor ..................................... 96
  264.       ConsoleInsideColor ..................................... 96
  265.       ConsolePos ............................................. 96
  266.       Const .................................................. 96
  267.       Cos .................................................... 97
  268.       CpuClass ............................................... 97
  269.       CountryCode ............................................ 97
  270.       CurrencySymbol ......................................... 97
  271.       CurrentEnvironment ..................................... 98
  272.       CurrentWindow .......................................... 98
  273.  
  274.     Computer Tyme * MarxMenu * Table of Contents            Page #5
  275.     -----------------------------------------------------------------
  276.     
  277.       Cursor ................................................. 98
  278.       CustomBox .............................................. 98
  279.       DateSeparator .......................................... 99
  280.       DateString ............................................. 99
  281.       Day .................................................... 99
  282.       DayOf .................................................. 99
  283.       DayOfWeek .............................................. 99
  284.       DayOfWeekOf ............................................ 100
  285.       DecimalSeparator ....................................... 100
  286.       Delete ................................................. 100
  287.       DelFile ................................................ 101
  288.       Devices ................................................ 101
  289.       DirectoriesOnly ........................................ 101
  290.       DisplayType ............................................ 101
  291.       DiskType ............................................... 102
  292.       Dispose ................................................ 102
  293.       DosVersion ............................................. 103
  294.       DosVersionString ....................................... 103
  295.       DosWindow .............................................. 103
  296.       DoubleLineBox .......................................... 103
  297.       DrawBox ................................................ 103
  298.       Drives ................................................. 104
  299.       DvAppNumber ............................................ 104
  300.       DvFrame ................................................ 104
  301.       DvFreeze ............................................... 104
  302.       DvHide ................................................. 105
  303.       DvKillTask ............................................. 105
  304.       DvLastHandle ........................................... 105
  305.       DvLoaded ............................................... 105
  306.       DvMoveWindow ........................................... 105
  307.       DvMyHandle ............................................. 105
  308.       DvPifExecute ........................................... 106
  309.       DvResizeWindow ......................................... 106
  310.       DvSetBottom ............................................ 106
  311.       DvSetTop ............................................... 106
  312.       DvUnFreeze ............................................. 107
  313.       DvUnHide ............................................... 107
  314.       Else ................................................... 107
  315.       ElseIf ................................................. 107
  316.       EndComment ............................................. 108
  317.       Endif .................................................. 108
  318.       EndLoop ................................................ 108
  319.       EndOfFile .............................................. 109
  320.       EndProc ................................................ 109
  321.       EndWhile ............................................... 109
  322.       EnvFree ................................................ 109
  323.       EnvSize ................................................ 110
  324.       EraseTopWindow ......................................... 110
  325.       EraseWindow ............................................ 110
  326.       Execute ................................................ 110
  327.       ExistDir ............................................... 112
  328.       ExistFile .............................................. 112
  329.       ExistOnPath ............................................ 112
  330.       ExitCode ............................................... 112
  331.       ExitMenu ............................................... 113
  332.       Exp .................................................... 113
  333.  
  334.     Computer Tyme * MarxMenu * Table of Contents            Page #6
  335.     -----------------------------------------------------------------
  336.     
  337.       Explode ................................................ 113
  338.       ExplodeDelay ........................................... 113
  339.       Extension .............................................. 113
  340.       FileAppend ............................................. 113
  341.       FileAssign ............................................. 114
  342.       FileAttr ............................................... 114
  343.       FileClose .............................................. 115
  344.       FileCreate ............................................. 115
  345.       FileDate ............................................... 115
  346.       FileFlush .............................................. 115
  347.       FileLog ................................................ 115
  348.       FileOpen ............................................... 116
  349.       FilePart ............................................... 116
  350.       FilePos ................................................ 116
  351.       FileReadln ............................................. 116
  352.       FileRename ............................................. 117
  353.       FileResult ............................................. 117
  354.       FileSeek ............................................... 117
  355.       FileSize ............................................... 117
  356.       FileTime ............................................... 117
  357.       FileWrite .............................................. 118
  358.       FileWriteln ............................................ 118
  359.       FixPath ................................................ 118
  360.       Floppies ............................................... 118
  361.       ForceExplosion ......................................... 118
  362.       ForceExtension ......................................... 118
  363.       Fraction ............................................... 119
  364.       FreeDiskSpace .......................................... 119
  365.       FreeEms ................................................ 119
  366.       FreeMem ................................................ 119
  367.       FreeMemory ............................................. 119
  368.       GetMem ................................................. 120
  369.       GotoXY ................................................. 120
  370.       HexString .............................................. 120
  371.       HiddenAndSystem ........................................ 120
  372.       HighWord ............................................... 121
  373.       Hour ................................................... 121
  374.       HourOf ................................................. 121
  375.       Hundredth .............................................. 121
  376.       IdleProgram ............................................ 121
  377.       If ..................................................... 122
  378.       InactiveBox ............................................ 123
  379.       InactiveBoxColor ....................................... 123
  380.       InactiveShadow ......................................... 124
  381.       Include ................................................ 124
  382.       IncludeDirectories ..................................... 124
  383.       InFile ................................................. 125
  384.       InputBlankChar ......................................... 125
  385.       InputLength ............................................ 125
  386.       InputString ............................................ 126
  387.       Insert ................................................. 126
  388.       InsertMode ............................................. 126
  389.       Int .................................................... 126
  390.       Integer ................................................ 126
  391.       Intr ................................................... 127
  392.       InverseColor ........................................... 127
  393.  
  394.     Computer Tyme * MarxMenu * Table of Contents            Page #7
  395.     -----------------------------------------------------------------
  396.     
  397.       InvertString ........................................... 127
  398.       Jump ................................................... 127
  399.       KbdReady ............................................... 128
  400.       KeyEvent ............................................... 128
  401.       KeyFromMouse ........................................... 128
  402.       KeySave ................................................ 128
  403.       KillMusic .............................................. 129
  404.       LastDrive .............................................. 129
  405.       LastKey ................................................ 129
  406.       Left ................................................... 129
  407.       Length ................................................. 129
  408.       Ln ..................................................... 130
  409.       Loc .................................................... 130
  410.       LockWord ............................................... 131
  411.       Logoff ................................................. 132
  412.       LogoffTime ............................................. 132
  413.       Logout ................................................. 132
  414.       LongestLine ............................................ 133
  415.       Loop ................................................... 133
  416.       LoopIndex .............................................. 134
  417.       LoopLevel .............................................. 134
  418.       LoopLimit .............................................. 135
  419.       LowerCase .............................................. 135
  420.       LowWord ................................................ 135
  421.       MachineName ............................................ 135
  422.       MakeListEntry .......................................... 135
  423.       MarxVersion ............................................ 136
  424.       MasterEnvironment ...................................... 136
  425.       Max .................................................... 136
  426.       MatrixInvert ........................................... 136
  427.       Mem .................................................... 137
  428.       MemL ................................................... 137
  429.       MemSize ................................................ 137
  430.       MemW ................................................... 137
  431.       MenuKeyBuffer .......................................... 138
  432.       MhsDirectory ........................................... 138
  433.       MhsMailDirectory ....................................... 138
  434.       MhsReadFile ............................................ 138
  435.       MhsSendDirectory ....................................... 139
  436.       MhsUserDirectory ....................................... 139
  437.       Mid .................................................... 139
  438.       Min .................................................... 140
  439.       MinorDosVersion ........................................ 140
  440.       Minute ................................................. 140
  441.       MinuteOf ............................................... 140
  442.       MkDir .................................................. 140
  443.       Mod .................................................... 141
  444.       ModifyPath ............................................. 141
  445.       Month .................................................. 141
  446.       MonthOf ................................................ 141
  447.       Mouse .................................................. 141
  448.       MouseHorizontal ........................................ 142
  449.       MouseVertical .......................................... 142
  450.       MoveWindow ............................................. 142
  451.       MS-DOS ................................................. 143
  452.       MxCmd .................................................. 143
  453.  
  454.     Computer Tyme * MarxMenu * Table of Contents            Page #8
  455.     -----------------------------------------------------------------
  456.     
  457.       NamePart ............................................... 143
  458.       NetworkVersion ......................................... 144
  459.       NextWord ............................................... 144
  460.       Nil .................................................... 144
  461.       NoBoxBorder ............................................ 144
  462.       NoExit ................................................. 144
  463.       Not .................................................... 144
  464.       NotesLeft .............................................. 145
  465.       NotesPlayed ............................................ 145
  466.       NovAccountExpDate ...................................... 145
  467.       NovAddUserToGroup ...................................... 145
  468.       NovAddToSet ............................................ 145
  469.       NovAttach .............................................. 146
  470.       NovAttachedServers ..................................... 146
  471.       NovAutoDetach .......................................... 146
  472.       NovBinderyAccess ....................................... 147
  473.       NovBroadcastMode ....................................... 147
  474.       NovCaptureCopies ....................................... 147
  475.       NovCaptureFF ........................................... 147
  476.       NovCaptureFile ......................................... 148
  477.       NovCaptureFlush ........................................ 148
  478.       NovCaptureForm ......................................... 148
  479.       NovCaptureQueue ........................................ 148
  480.       NovCaptureReset ........................................ 149
  481.       NovCaptureSetup ........................................ 149
  482.       NovCaptureTabSize ...................................... 149
  483.       NovCaptureTimeOut ...................................... 150
  484.       NovCaptureUseBanner .................................... 150
  485.       NovChangePassword ...................................... 150
  486.       NovCleanVolumeName ..................................... 150
  487.       NovClearConnection ..................................... 151
  488.       NovCloseBindery ........................................ 151
  489.       NovCloseSemaphore ...................................... 151
  490.       NovConnection .......................................... 151
  491.       NovConnectionsInUse .................................... 151
  492.       NovConsoleOperator ..................................... 152
  493.       NovCreateObject ........................................ 152
  494.       NovCreateProperty ...................................... 152
  495.       NovDefaultServer ....................................... 153
  496.       NovDeleteFromSet ....................................... 153
  497.       NovDeleteObject ........................................ 153
  498.       NovDeleteProperty ...................................... 153
  499.       NovDetach .............................................. 154
  500.       NovDownServer .......................................... 154
  501.       NovEndCapture .......................................... 154
  502.       NovForceDownServer ..................................... 154
  503.       NovFreeDirSlots ........................................ 154
  504.       NovFreeVolumeSpace ..................................... 155
  505.       NovFullName ............................................ 155
  506.       NovGetConnections ...................................... 155
  507.       NovGetMessage .......................................... 156
  508.       NovGraceLoginReset ..................................... 156
  509.       NovGraceLogins ......................................... 156
  510.       NovGroupMembers ........................................ 157
  511.       NovGroups .............................................. 157
  512.       NovInGroup ............................................. 157
  513.  
  514.     Computer Tyme * MarxMenu * Table of Contents            Page #9
  515.     -----------------------------------------------------------------
  516.     
  517.       NovLastLoginDate ....................................... 157
  518.       NovLogin ............................................... 158
  519.       NovLoginName ........................................... 158
  520.       NovLogout .............................................. 158
  521.       NovMapDrive ............................................ 159
  522.       NovMapRoot ............................................. 159
  523.       NovMaxConnections ...................................... 159
  524.       NovMinPasswordLength ................................... 159
  525.       NovMyLoginName ......................................... 160
  526.       NovMyPassword .......................................... 160
  527.       NovMyPrintQueues ....................................... 160
  528.       NovObjectID ............................................ 161
  529.       NovObjects ............................................. 161
  530.       NovObjectSecurity ...................................... 161
  531.       NovOpenBindery ......................................... 162
  532.       NovOpenSemaphore ....................................... 162
  533.       NovPasswordExpDate ..................................... 162
  534.       NovPreferredServer ..................................... 162
  535.       NovPrimaryServer ....................................... 163
  536.       NovPrintQueues ......................................... 163
  537.       NovPropertySecurity .................................... 163
  538.       NovPropertyValues ...................................... 164
  539.       NovReadGroups .......................................... 164
  540.       NovReadSecurityEquals .................................. 165
  541.       NovRemoveUserFromGroup ................................. 165
  542.       NovRenameObject ........................................ 165
  543.       NovResult .............................................. 165
  544.       NovScanProperties ...................................... 166
  545.       NovScanTrusteePaths .................................... 166
  546.       NovSecurityEquals ...................................... 166
  547.       NovSemaphoreTimeout .................................... 167
  548.       NovSemaphoreUsers ...................................... 167
  549.       NovSemaphoreValue ...................................... 167
  550.       NovSendMessage ......................................... 167
  551.       NovServerLogin ......................................... 168
  552.       NovServers ............................................. 168
  553.       NovServerTime .......................................... 168
  554.       NovSetPreferredServer .................................. 168
  555.       NovSetPrimaryServer .................................... 169
  556.       NovSetProperty ......................................... 169
  557.       NovShellVersion ........................................ 169
  558.       NovSignalSemaphore ..................................... 169
  559.       NovStaticObject ........................................ 170
  560.       NovStaticProperty ...................................... 170
  561.       NovStationAddress ...................................... 170
  562.       NovTotalDirSlots ....................................... 171
  563.       NovTotalVolumeSpace .................................... 171
  564.       NovUsedVolumeSpace ..................................... 171
  565.       NovUserInGroup ......................................... 171
  566.       NovUsers ............................................... 172
  567.       NovUsersLoggedIn ....................................... 172
  568.       NovVersionNumber ....................................... 172
  569.       NovVolumeNumber ........................................ 172
  570.       NovVolumes ............................................. 173
  571.       NovWaitOnSemaphore ..................................... 173
  572.       NovWritePropValue ...................................... 173
  573.  
  574.     Computer Tyme * MarxMenu * Table of Contents            Page #10
  575.     -----------------------------------------------------------------
  576.     
  577.       NumberOfElements ....................................... 173
  578.       Now .................................................... 174
  579.       NumLock ................................................ 174
  580.       Offset ................................................. 174
  581.       OnKey .................................................. 174
  582.       OnScreenOnly ........................................... 176
  583.       OpenPrinter ............................................ 176
  584.       OptionSwitch ........................................... 176
  585.       Or ..................................................... 177
  586.       Ord .................................................... 177
  587.       OutFile ................................................ 177
  588.       OverKey ................................................ 178
  589.       Overlay ................................................ 178
  590.       PadLeft ................................................ 178
  591.       PadRight ............................................... 178
  592.       ParallelPorts .......................................... 179
  593.       ParamStr ............................................... 179
  594.       ParentEnvironment ...................................... 179
  595.       Password ............................................... 179
  596.       Path ................................................... 180
  597.       PathPart ............................................... 180
  598.       PauseAfterExecute ...................................... 180
  599.       Pi ..................................................... 180
  600.       PickFile ............................................... 180
  601.       PickMany ............................................... 181
  602.       PickManyPositions ...................................... 182
  603.       PickOne ................................................ 182
  604.       PickPosition ........................................... 182
  605.       Port ................................................... 182
  606.       Pos .................................................... 182
  607.       PosInList .............................................. 183
  608.       PosInSortedList ........................................ 183
  609.       Power .................................................. 183
  610.       Pred ................................................... 184
  611.       Print .................................................. 184
  612.       PrinterName ............................................ 184
  613.       Println ................................................ 184
  614.       PrintScreen ............................................ 184
  615.       Procedure .............................................. 185
  616.       PullMenu ............................................... 186
  617.       Qualifier .............................................. 186
  618.       Random ................................................. 187
  619.       ReadAscTextFile ........................................ 187
  620.       ReadDirectory .......................................... 187
  621.       ReadEnv ................................................ 188
  622.       ReadEnvironment ........................................ 188
  623.       ReadFileBlock .......................................... 189
  624.       ReadKey ................................................ 189
  625.       Readln ................................................. 189
  626.       ReadlnAsc .............................................. 190
  627.       ReadSqDirectory ........................................ 190
  628.       ReadTextFile ........................................... 191
  629.       Real ................................................... 192
  630.       Reboot ................................................. 192
  631.       ReleaseDate ............................................ 192
  632.       Repeat ................................................. 192
  633.  
  634.     Computer Tyme * MarxMenu * Table of Contents            Page #11
  635.     -----------------------------------------------------------------
  636.     
  637.       ResizeWindow ........................................... 193
  638.       Return ................................................. 193
  639.       ReturnCode ............................................. 193
  640.       Right .................................................. 194
  641.       RmDir .................................................. 194
  642.       RollWindow ............................................. 194
  643.       Run .................................................... 195
  644.       SavePosition ........................................... 195
  645.       ScreenHeight ........................................... 195
  646.       ScreenWidth ............................................ 196
  647.       ScrollLock ............................................. 196
  648.       ScrollMove ............................................. 196
  649.       Second ................................................. 196
  650.       SecondOf ............................................... 196
  651.       Security ............................................... 197
  652.       Segment ................................................ 197
  653.       SelectPath ............................................. 197
  654.       SerialNumber ........................................... 197
  655.       SerialPorts ............................................ 198
  656.       SetArraySize ........................................... 198
  657.       SetEnv ................................................. 198
  658.       SetTimerTask ........................................... 198
  659.       SetTopWindow ........................................... 199
  660.       SetWindowUnder ......................................... 199
  661.       Shadow ................................................. 199
  662.       ShadowColor ............................................ 200
  663.       ShadowPosition ......................................... 200
  664.       Shared ................................................. 200
  665.       ShellEnvironment ....................................... 200
  666.       Shl .................................................... 201
  667.       Shr .................................................... 201
  668.       Sin .................................................... 201
  669.       SingleLineBox .......................................... 201
  670.       SmallShadow ............................................ 201
  671.       SortArray .............................................. 202
  672.       SortArrayLinked ........................................ 202
  673.       Sound .................................................. 203
  674.       SplitPath .............................................. 203
  675.       Sqr .................................................... 203
  676.       StandardIO ............................................. 203
  677.       Str .................................................... 204
  678.       StuffAKey .............................................. 204
  679.       StuffKBD ............................................... 204
  680.       StuffKeyboardNow ....................................... 204
  681.       Succ ................................................... 204
  682.       Suggest ................................................ 205
  683.       TaskNumber ............................................. 205
  684.       TextBackground ......................................... 205
  685.       TextColor .............................................. 205
  686.       TextMode ............................................... 206
  687.       TextPos ................................................ 206
  688.       TextSeek ............................................... 206
  689.       Then ................................................... 206
  690.       TimeOf ................................................. 206
  691.       Timer .................................................. 207
  692.       TimeSeparator .......................................... 207
  693.  
  694.     Computer Tyme * MarxMenu * Table of Contents            Page #12
  695.     -----------------------------------------------------------------
  696.     
  697.       TimeString ............................................. 207
  698.       TMaxActiveTasks ........................................ 207
  699.       TMaxCreateTask ......................................... 208
  700.       TMaxCut ................................................ 208
  701.       TMaxDeleteTask ......................................... 208
  702.       TMaxDirectSwitching .................................... 208
  703.       TMaxEMSMemLim .......................................... 208
  704.       TMaxGetPasteBuffer ..................................... 209
  705.       TMaxInstalled .......................................... 209
  706.       TMaxMaxTasks ........................................... 209
  707.       TMaxNameTask ........................................... 209
  708.       TMaxPaste .............................................. 209
  709.       TMaxReadTaskInfo ....................................... 210
  710.       TMaxResult ............................................. 210
  711.       TMaxReturnCount ........................................ 210
  712.       TMaxSetPasteBuffer ..................................... 210
  713.       TMaxSwitchTasks ........................................ 211
  714.       TMaxSwitchToManager .................................... 211
  715.       TMaxTakeOver ........................................... 211
  716.       TMaxTaskOpenFiles ...................................... 211
  717.       TMaxThisTask ........................................... 211
  718.       TMaxVersion ............................................ 212
  719.       Today .................................................. 212
  720.       Tomorrow ............................................... 212
  721.       Tone ................................................... 212
  722.       TotalDiskSpace ......................................... 212
  723.       TotalEms ............................................... 213
  724.       Trim ................................................... 213
  725.       TrimInputString ........................................ 213
  726.       TrueName ............................................... 213
  727.       UnBlank ................................................ 214
  728.       UniqueFileName ......................................... 214
  729.       Until .................................................. 214
  730.       UpperCase .............................................. 215
  731.       UpperCaseOnly .......................................... 215
  732.       UseArrows .............................................. 215
  733.       UseCommand ............................................. 216
  734.       UsedDiskSpace .......................................... 216
  735.       UseNovPassword ......................................... 216
  736.       Value .................................................. 216
  737.       Var .................................................... 217
  738.       VarType ................................................ 217
  739.       VideoMode .............................................. 217
  740.       VideoPage .............................................. 218
  741.       ViewArray .............................................. 218
  742.       ViewTextFile ........................................... 218
  743.       VinCheckService ........................................ 218
  744.       VinesInt ............................................... 219
  745.       VinesLoaded ............................................ 219
  746.       VinUserName ............................................ 219
  747.       VinSerialNumber ........................................ 219
  748.       Volume ................................................. 219
  749.       Wait ................................................... 219
  750.       WaitOrKbdReady ......................................... 220
  751.       WhereX ................................................. 220
  752.       WhereXAbs .............................................. 220
  753.  
  754.     Computer Tyme * MarxMenu * Table of Contents            Page #13
  755.     -----------------------------------------------------------------
  756.     
  757.       WhereY ................................................. 220
  758.       WhereYAbs .............................................. 220
  759.       While .................................................. 221
  760.       WholeFileNames ......................................... 221
  761.       Window ................................................. 221
  762.       WindowHeight ........................................... 221
  763.       WindowWidth ............................................ 221
  764.       WinX ................................................... 222
  765.       WinY ................................................... 222
  766.       WordStarKeys ........................................... 222
  767.       WorkString ............................................. 222
  768.       Write .................................................. 222
  769.       WriteAscTextFile ....................................... 223
  770.       WriteCenter ............................................ 223
  771.       WriteError ............................................. 223
  772.       WriteFileBlock ......................................... 223
  773.       Writeln ................................................ 223
  774.       WritelnAsc ............................................. 224
  775.       WritelnError ........................................... 224
  776.       WriteTextFile .......................................... 224
  777.       WriteVertical .......................................... 224
  778.       Xor .................................................... 225
  779.       Year ................................................... 225
  780.       YearOf ................................................. 225
  781.       String Constants ....................................... 225
  782.       Time and Date Constants ................................ 226
  783.       Video Constants ........................................ 226
  784.       Color Constants ........................................ 227
  785.       Boolean Constants ...................................... 227
  786.  
  787.     Computer Tyme * MarxMenu * Users Manual                 Page #1
  788.     -----------------------------------------------------------------
  789.     
  790.      COPYRIGHT
  791.     
  792.     This manual is copyrighted material and all rights are reserved.
  793.     MarxMenu is a programming language which describes to the computer what
  794.     it is supposed to do. Even though some of the individual words in
  795.     MarxMenu are used in other programming languages, I claim a copyright on
  796.     the collection of words which make up the MarxMenu language. I therefore
  797.     consider it an infringement of my Copyright to create a software product
  798.     which uses the MarxMenu language, or translates MarxMenu source code,
  799.     without purchasing a license to do so.
  800.     
  801.     The combinations of definitions of commands in this manual constitute a
  802.     copyrighted work. Any publication which describes a computer language
  803.     for which the MarxMenu command set is a subset is a violation of the
  804.     copyright of this software and this written manual.
  805.     
  806.     In other words, don't try to clone MarxMenu.
  807.     
  808.     
  809.      LICENSE AGREEMENT:
  810.     
  811.     You are licensed to use this program on a single CPU or workstation. If
  812.     you are running on a network, you are required to license a separate
  813.     copy for each workstation or a file server license for each file server.
  814.     If you are running on a multiuser operating system such as Concurrent
  815.     DOS, you are required to license a copy for each workstation. Everyone
  816.     who uses this menu, must license a copy unless several people share the
  817.     same workstation.
  818.     
  819.     This software is licensed and not sold. The license begins when Computer
  820.     Tyme receives payment in full. You may not transfer, sell, sublease or
  821.     rent this software without the written consent of Computer Tyme. You are
  822.     not allowed to distribute MarxMenu in runtime form with software you
  823.     developed unless it is in combination with a paid for copy of MarxMenu,
  824.     or you have made special arrangements in writing with Computer Tyme to
  825.     do so.
  826.     
  827.     Use of this product constitutes your acceptance of the terms and
  828.     conditions of this license and of my copyright and your agreement to
  829.     abide by these terms and conditions.
  830.     
  831.     
  832.      MARXMENU WARRANTY:
  833.     
  834.     The warranty is limited to the diskettes to be machine readable for a
  835.     period of 30 days after purchase. Although we try hard to write perfect
  836.     software that has no bugs, we do not guarantee that. We also do not
  837.     guarantee that this product is fit for every purpose and we are not
  838.     liable for any damages that might occur from use of this product. This
  839.     agreement is governed by the laws of the State of Missouri.
  840.     
  841.     I would like to thank the following people for making this product
  842.     possible:
  843.     
  844.  
  845.     Computer Tyme * MarxMenu * Users Manual                 Page #2
  846.     -----------------------------------------------------------------
  847.     
  848.     Joe Smith and Kevin Moore for helping write this manual. My wife Vicki
  849.     for being good to me and helping with revisions and editing.
  850.     
  851.     The Computer Tyme staff for being the best employees in the world.
  852.     
  853.     Borland International for writing Turbo Pascal and keeping it bug free
  854.     and well supported.
  855.     
  856.     TurboPower Software for their very powerful extensions to Turbo Pascal
  857.     and their well written, well supported product.
  858.     
  859.     All users who actually paid for this product so that we may continue to
  860.     eat.
  861.     
  862.     Those of you who have pointed out bugs and made suggestions to improve
  863.     our product.
  864.     
  865.     
  866.      MARXMENU TRADEMARKS
  867.     
  868.     MarxMenu is a registered trademark of Computer Tyme. DOS ToolBox,
  869.     Directory Master, and The Network Survival Kit are trademarks of
  870.     Computer Tyme.
  871.     
  872.      Lotus is a registered trademark of Lotus Development.
  873.      Wordstar is a registered trademark of MicroPro International.
  874.      Smart Software is a trademark of Informix.
  875.      MS-DOS and MS-Windows are trademarks of Microsoft.
  876.      Concurrent DOS and DR-DOS are trademarks of Digital Research.
  877.      Turbo Pascal is a trademark of Borland International.
  878.      OPRO and TPRO are trademarks of TurboPower Software.
  879.      Netware and Novell are trademarks of Novell.
  880.      DesqView and QEMM are trademarks of Quarterdeck.
  881.      IBM and OS/2 are trademarks of International Business Machines.
  882.     
  883.      Created using Turbo Pascal
  884.      Copyright 1983-90 by Borland International
  885.     
  886.     When I first wrote this program my friends referred to it as Marc's
  887.     Menu. That's where the name MarxMenu came from. It has nothing to do
  888.     with either Carl or Groucho Marx.
  889.     
  890.     
  891.      TECHNICAL SUPPORT
  892.     
  893.     Technical support for MarxMenu is provided several ways. The first is by
  894.     calling our voice line 1-417-866-1222. We would ask that you not call
  895.     the 800 number as that is for orders and ordering information only.
  896.     
  897.     We have several support staff and will try to answer your questions as
  898.     quickly and efficiently as possible. We at Computer Tyme look at
  899.     technical support as an opportunity to improve our product.
  900.     
  901.  
  902.     Computer Tyme * MarxMenu * Users Manual                 Page #3
  903.     -----------------------------------------------------------------
  904.     
  905.     We also have a 24 hour 2 line BBS system. This allows users with modems
  906.     to leave messages about support issues. There are several user uploaded
  907.     menus here and it serves as a forum for MarxMenu users to share ideas
  908.     and techniques.
  909.     
  910.     Our BBS number is 1-417-866-1665. It supports 14400 baud but is 2400
  911.     baud compatible. Use 8 bits, no parity, 1 stop bit (8N1). You will also
  912.     need to set your terminal emulation mode to ANSI or VT100. Do not try to
  913.     call my BBS with 7 bits or even parity. It won't work.
  914.     
  915.     On our BBS are additional sample menu files that other MarxMenu users
  916.     like yourself have uploaded. We encourage you to share your work with
  917.     others so that yet more MarxMenu users can benefit.
  918.     
  919.     We are also available on Compuserve. ID# 76505,1120.
  920.     
  921.     We also offer a Fast Update Service which includes regular upgrades sent
  922.     to you automatically as we come out with them. This doesn't mean every
  923.     version of MarxMenu, but every so often after making several
  924.     improvements and the product is at a stable point. The Fast Update
  925.     Service includes special access to our support BBS.
  926.     
  927.     This service is for the very fierce MarxMenu user who has to have the
  928.     "Latest and Greatest" all the time.
  929.     
  930.     
  931.      INSTALLATION
  932.     
  933.     The following installation instructions are for both MarxMenu single
  934.     user version and MarxMenu network version. The network version is
  935.     included in The Network Survival Kit.
  936.     
  937.     The single user version of MarxMenu is installed by copying the disks
  938.     into a subdirectory called MARX to keep the files better organized.
  939.     However, this is not necessary. Copy all the disks that come with
  940.     MarxMenu into a directory on your hard disk or network.
  941.     
  942.     The Network Survival Kit is installed by copying the disk into a
  943.     directory on your server. Typically you would make a directory called
  944.     NSK under the PUBLIC directory. That way the NSK directory will inherit
  945.     the rights of PUBLIC. It will unpack into about 3.5 megs of programs and
  946.     documentation.
  947.     
  948.     Once the files are copied into the proper directory, for example,
  949.     PUBLIC\NSK on the network or C:\MARX on a single hard drive, type
  950.     INSTALL. Be sure to have your serial number and access code ready. When
  951.     this is done, you can run some of the sample menus by typing MARX
  952.     <menu>.
  953.     
  954.  
  955.     Computer Tyme * MarxMenu * Users Manual                 Page #4
  956.     -----------------------------------------------------------------
  957.     
  958.     Be sure to print out the DOC files on any programs you are interested in
  959.     and print out the MARXREAD.ME file. MARXHELP is activated by typing
  960.     MARXHELP at the command line.
  961.     
  962.     IMPORTANT: Make sure you do not run the install from the floppy disk.
  963.     
  964.     If you are running the Network Survival Kit on several file servers that
  965.     are bridged together, and you have purchased several single server
  966.     MarxMenus, be sure not to install the same serial number on more than
  967.     one file server. MarxMenu is smart enough to detect this. If you have a
  968.     multi-server version of MarxMenu, then you can install MarxMenu on
  969.     several fileservers without getting a license violation error.
  970.     
  971.                -------- V E R Y * I M P O R T A N T --------
  972.     
  973.     If you do put the menu system in a subdirectory, it must be path
  974.     accessible. That is, you must have a path statement in your AUTOEXEC.BAT
  975.     file that includes the directory where the menu system resides. A
  976.     typical path statement might look like this:
  977.     
  978.      PATH=C:\;C:\DOS;C:\MARX;
  979.     
  980.     MarxMenu requires up to 100 bytes of free environment space. It won't
  981.     run properly without it. The way you get more environment space is to
  982.     add a SHELL command to your CONFIG.SYS file.
  983.     
  984.      SHELL=COMMAND.COM /P /E:nnn
  985.     
  986.     Where NNN is the number of bytes for the environment to reserve. Note
  987.     that if you are running DOS 3.1 then NNN is the number of 16 byte blocks
  988.     to allocate for the environment.
  989.     
  990.      For DOS 3.2 or later:
  991.      SHELL=COMMAND.COM /P /E:400
  992.     
  993.      For DOS 3.1:
  994.      SHELL=COMMAND.COM /P /E:25
  995.     
  996.     If MarxMenu gives you an environment space error, this is where you go
  997.     to fix it. After changing the CONFIG.SYS file, you will have to reboot
  998.     the computer to make it take effect.
  999.     
  1000.     Another situation that can cause an out of environment space error is
  1001.     having more than one COMMAND.COM loaded. You can test for this by
  1002.     running RAMMAP or MAPMEM. These programs will show you what's in memory.
  1003.     If you need to load a second COMMAND.COM be sure to use the /E switch to
  1004.     expand the environment of the new COMMAND.COM.
  1005.     
  1006.  
  1007.     Computer Tyme * MarxMenu * Users Manual                 Page #5
  1008.     -----------------------------------------------------------------
  1009.     
  1010.      GETTING STARTED QUICK
  1011.     
  1012.     After installing the software the first thing to do is try it out. Type
  1013.     MARX QUICK (or MARX QUICKNOV for Novell networks) and a menu should come
  1014.     up. Then select the Utilities option. This will open up another window.
  1015.     You then choose DOS Menu and then Free Space. If everything goes right
  1016.     the menu will run FREE.EXE and then return to the menu. After returning
  1017.     to the menu press ESC a few times and exit back to the command line.
  1018.     
  1019.     If everything works right then MarxMenu is working. If you get errors
  1020.     then you'll need to fix them before going on. If you get an "Out of
  1021.     environment space" error then you'll have to increase the environment
  1022.     space before continuing.
  1023.     
  1024.     The MarxMenu disk contains many sample menus for you to start with.
  1025.     Which one to use depends on what your needs are. Typically on a single
  1026.     user system you might start with QUICK or LEVEL1 menu.
  1027.     
  1028.     To start with the QUICK menu, copy it to a different name such as MY.MNU
  1029.     as follows:
  1030.     
  1031.      COPY QUICK.MNU MY.MNU
  1032.     
  1033.     Then edit MY.MNU with your favorite editor. You will quickly see how
  1034.     this menu works and will be able to substitute your programs for the
  1035.     ones it is set up for. You can then test and run your menu by typing
  1036.     MARX MY.
  1037.     
  1038.     If you want more of a self-configuring menu you might try the LEVEL1
  1039.     menu. This menu requires no text editor coding and lets you set up menus
  1040.     interactively.
  1041.     
  1042.     On a Novell network you might start with the QUICKNOV menu or translate
  1043.     your existing Novell menus with NOVTRANS. The LOGIN menu requires a lot
  1044.     of customization for your system. I wouldn't start on this menu until
  1045.     your regular menus are written.
  1046.     
  1047.     In the QUICK and QUICKNOV examples we have defined AddChoice and Task
  1048.     procedures. These procedures are written in MarxMenu so you won't find
  1049.     them in the list of MarxMenu's internal commands. AddChoice commands are
  1050.     used with OnKey Task commands to create selections in the menu.
  1051.     
  1052.        AddChoice('Directory Master',1)
  1053.        AddChoice('Pick Directory',2)
  1054.        AddChoice('Memory Map',3)
  1055.        AddChoice('Free Space',4)
  1056.     
  1057.        CornerStretchBox ('DOS Menu',38,15)
  1058.     
  1059.  
  1060.     Computer Tyme * MarxMenu * Users Manual                 Page #6
  1061.     -----------------------------------------------------------------
  1062.     
  1063.        OnKey Task(1)
  1064.           DM
  1065.     
  1066.        OnKey Task(2)
  1067.           PD
  1068.     
  1069.        OnKey Task(3)
  1070.           RamMap
  1071.           Pause
  1072.     
  1073.        OnKey Task(4)
  1074.           Free
  1075.           Pause
  1076.     
  1077.     It's that simple! The AddChoice controls what you see on the screen and
  1078.     the OnKey Task controls what it does. Under the OnKey command it's just
  1079.     like writing a batch file.
  1080.     
  1081.     The numbers in the AddChoice statements correspond to the OnKey Task(n)
  1082.     statements so that Tasks are associated with choices. The
  1083.     CornerStretchBox creates a self-sizing box where the upper left corner
  1084.     position coordinates are specified.
  1085.     
  1086.     You won't find the commands AddChoice, CornerStretchBox, or Task in the
  1087.     manual. That's because they are procedures defined in Include files. The
  1088.     QUICK and QUICKNOV menus include CUSTOM.INC and WINSUP.INC which allow
  1089.     you to set up various features of the menus. CUSTOM.INC can include
  1090.     either NOVELL.INC, BLOCK.INC, or GRID.INC which change the look and feel
  1091.     of the menus. You might want to experiment with these to see which one
  1092.     you like the best. You'll have to go into these three include files if
  1093.     you want to change the colors.  PLEASE NOTE:  If you revise an include
  1094.     file, you will need to recompile your .MNU file with the MARXCOMP
  1095.     compiler.  Typing "MARX {menuname}" will not incorporate changes made
  1096.     to any include files until after you type "MARXCOMP {menuname}".
  1097.     
  1098.     When you execute a menu after modifying include (INC) files, MarxMenu
  1099.     doesn't automatically recompile the menu the same way it does when you
  1100.     modify the menu file directly. After changing an include file referenced
  1101.     within a menu, you need to force a recompile by typing MARXCOMP QUICK or
  1102.     you can delete the MRX file to force a recompile.
  1103.     
  1104.     These menus are designed to get you going quickly. If you want to do
  1105.     weird stuff MarxMenu can do weird stuff, but it takes a little more
  1106.     work. The reason we have so many commands in MarxMenu is to be able to do
  1107.     weird stuff so if you need to do something strange, we probably already
  1108.     have a command to do it.
  1109.     
  1110.     The example menus on disk (MNU files) show a variety of uses for
  1111.     MarxMenu. They can be used like libraries of routines to cut code from
  1112.     and paste into your current menu. A good way to learn MarxMenu is to
  1113.     print out the example menus and study the code.
  1114.     
  1115.  
  1116.     Computer Tyme * MarxMenu * Users Manual                 Page #7
  1117.     -----------------------------------------------------------------
  1118.     
  1119.      DON'T USE THIS MANUAL - USE MARXHELP
  1120.     
  1121.     MarxHelp is a TSR pop-up help program for MarxMenu. It acts as an online
  1122.     reference guide to all of the MarxMenu commands. MarxHelp only takes 8k
  1123.     of RAM and is very useful while writing your MarxMenu menus. It gives
  1124.     you the complete manual on-line and is fully indexed electronically. It
  1125.     even has a keyword search to help you find the command you are looking
  1126.     for.
  1127.     
  1128.     I strongly encourage the use of MarxHelp. MarxHelp has everything this
  1129.     manual has in it and more and it is easier to read and find things than
  1130.     thumbing through pages. MarxHelp is updated with every release of
  1131.     MarxMenu and contains new features and program changes the paper manual
  1132.     doesn't. Once you get used to using it, you won't want to go back to
  1133.     paper documentation. Using MarxHelp is better than using the manual.
  1134.     
  1135.     To load MarxHelp type MarxHelp at the command line. This prepares
  1136.     MarxHelp to be available as a TSR while you're creating or editing a
  1137.     menu file. Then if you want to pop up an index press Shift-F3. The
  1138.     Shift-F2 key will repeat your last help topic and Shift-F1 will look up
  1139.     the word your cursor is on.
  1140.     
  1141.     To get more help on MarxMenu type MarxHelp /?. If you need to unload
  1142.     MarxHelp from memory, type MarxHelp /U. Once you bring up MarxHelp, read
  1143.     the Help on Help section for more detailed information on how to use
  1144.     MarxHelp. The MarxHelp also contains the entire text of the Dos ToolBox
  1145.     and Network Survival Kit utilities.
  1146.     
  1147.     MarxHelp comes with the Computer Tyme Network Survival Kit. It can also
  1148.     be downloaded from our support BBS. It does not come bundled with the
  1149.     single user version.
  1150.     
  1151.     
  1152.      COMMON QUESTIONS AND MISTAKES
  1153.     
  1154.     Q.) I type MARXMENU QUICK and when I try to run something it dumps me
  1155.     back at the command line.
  1156.     
  1157.     A.) To run a menu you need to run the MarxMenu from MARX.BAT. You should
  1158.     type MARX QUICK instead of MARXMENU QUICK.
  1159.     
  1160.     Q.) I'm getting "Error accessing Overlays!"
  1161.     
  1162.     A.) MarxMenu requires the file MARXMENU.OVR file to be in the same
  1163.     directory as the MARXMENU.EXE file. In previous versions of MarxMenu the
  1164.     EXE and OVR files were combined. This causes file sharing problems on
  1165.     some networks and dumb multitaskers such as Windows. So we had to
  1166.     separate the overlay file.
  1167.     
  1168.  
  1169.     Computer Tyme * MarxMenu * Users Manual                 Page #8
  1170.     -----------------------------------------------------------------
  1171.     
  1172.     Q.) Everything was working fine and then I moved the files to another
  1173.     directory and now I'm getting "Bad command or File Name".
  1174.     
  1175.     A.) The MARX.BAT is generated for a specific directory. Use your editor
  1176.     to edit MARX.BAT to run in the new directory. If you are still having
  1177.     problems change the ECHO OFF to ECHO ON and watch the batch file
  1178.     execute. You can type MARXMENU INST to recreate the batch files.
  1179.     
  1180.     Q.) I get stuck in the menu and it won't exit. Just keeps looping.
  1181.     
  1182.     A.) The MXSTOP.BAT, BATEXIT.BAT and DROPTO.BAT files need to be in the
  1183.     same directory as MARX.BAT and MarxMenu.
  1184.     
  1185.     Q.) I'm running LanTastic and when two people use the menu at the same
  1186.     time I get a "File Sharing Violation" error.
  1187.     
  1188.     A.) This is solved by setting the MARXMENU.OVR file to "Read Only".
  1189.     
  1190.     Q.) I tried changing the menu colors by editing the NOVELL.INC file but
  1191.     no colors changed. What am I doing wrong?
  1192.     
  1193.     A.) MarxMenu automatically recompiles when you change the menu file
  1194.     because it compares the date of the MNU file to the MRX file. Include
  1195.     files are not compared this way. What you need to do after changing an
  1196.     include file is to force MarxMenu to recompile. This is done by typing
  1197.     MARXCOMP <menu> or by deleting the MRX file.
  1198.     
  1199.     Q.) Under an OnKey statement, I'm mixing batch file commands and
  1200.     MarxMenu commands (using the "|" (vertical bar)). It seems that all the
  1201.     MarxMenu commands execute first rather than in the order that I
  1202.     specified.
  1203.     
  1204.     A.) Yes, since MarxMenu is a zero k menu system, all batch files
  1205.     commands are written to a batch file and executed when MarxMenu exits.
  1206.     It is also important to remember that when you return to MarxMenu that
  1207.     you come back to the beginning of the menu and not the last line you
  1208.     left.
  1209.     
  1210.     Q.) On my Novell network, I get "Error creating BAT file" when users try
  1211.     to run programs from the menu.
  1212.     
  1213.     A.) This is caused when users don't have enough access rights for
  1214.     MarxMenu to create temporary batch files. Use the SET TEMP=<directory>
  1215.     to point to a directory where the user has full access rights.
  1216.     
  1217.     Q.) I'm trying to execute a program and read the DOS errorlevel code and
  1218.     is isn't working. What am I doing wrong?
  1219.     
  1220.  
  1221.     Computer Tyme * MarxMenu * Users Manual                 Page #9
  1222.     -----------------------------------------------------------------
  1223.     
  1224.     A.) To read a dos errorlevel code into ReturnCode you must use the
  1225.     MarxMenu Execute command. You must also set UseCommand to off and you
  1226.     need to specify the COM or EXE extension. You also can't use the DOS
  1227.     piping or redirection commands.
  1228.     
  1229.     Q.) When I try to log off a Novell network from the menu I get a
  1230.     "Missing Batch File" error.
  1231.     
  1232.     A.) The reason you get a "Missing Batch File" error is because MARX.BAT
  1233.     is on the network and is no longer accessible after LOGOUT runs. Under
  1234.     MarxMenu the correct way to log off is to create an OFF.BAT file in the
  1235.     SYS:LOGIN directory. MarxMenu will automatically find this batch file
  1236.     and run it.
  1237.     
  1238.     
  1239.      MARXMENU FEATURES
  1240.     
  1241.     The basic idea behind MarxMenu is to display choices to the user, let
  1242.     him select a command, run the program without taking any memory, and
  1243.     return to the menu when done.
  1244.     
  1245.     The way MarxMenu works is that you start it with a batch file which runs
  1246.     MarxMenu. When the user selects an option MarxMenu writes a batch file
  1247.     and quits. The first batch file (MARX.BAT) calls the batch file that
  1248.     MarxMenu created which runs your application. When your application
  1249.     finishes the MARX.BAT file reloads MarxMenu and waits for the user to
  1250.     make a new choice.
  1251.     
  1252.     MarxMenu uses a script language that is designed around being simple to
  1253.     use and to read. The script language is used to paint the screen, wait
  1254.     for the user to input a key, and then write a batch file based on that
  1255.     key. To help you get going, MarxMenu comes with several prewritten
  1256.     sample menus that you can use as templates to make your menus. These
  1257.     templates are somewhat feature rich so that you don't have to figure out
  1258.     very much to get your MarxMenu going. The sample menus are designed to
  1259.     meet the needs of most menu users and are designed to get you up and
  1260.     running quick with as little pain as possible.
  1261.     
  1262.     But, MarxMenu is feature rich and has plenty of commands for those of
  1263.     you who want to do something weird. With 750 commands and growing we
  1264.     have attempted to deal with as many problems that users and network
  1265.     supervisors need to solve. So if you want to do something that my menu
  1266.     templates aren't set up to do then you have the power to get in and make
  1267.     MarxMenu do what you want. But it takes a little more effort to make it
  1268.     happen.
  1269.     
  1270.     The stranger you want to get with MarxMenu the more learning and effort
  1271.     it will take. But, unlike all the other menu systems out there, MarxMenu
  1272.     will get as strange as you need it to get. MarxMenu is a programming
  1273.     language targeted at non-programmers and puts the power of a
  1274.     professional programmer into the hands of those who have never written a
  1275.     line of code before. Even though MarxMenu may not be a true compiler or
  1276.     have the execution speed of C or Pascal, MarxMenu supports a far richer
  1277.     command language and a more elaborate method of automatic memory
  1278.     management. With MarxMenu you can write programs that would normally
  1279.     require 30 points higher IQ and used to be limited to the realm of the
  1280.     serious computer nerd. (Like Me!)
  1281.  
  1282.     Computer Tyme * MarxMenu * Users Manual                 Page #10
  1283.     -----------------------------------------------------------------
  1284.     
  1285.     
  1286.     
  1287.      OVERVIEW OF THE MARXMENU SYSTEM
  1288.     
  1289.     MarxMenu is not just another fill-in-the-blank menu system. It is a menu
  1290.     programming language and job control language. It gives you total
  1291.     freedom to do whatever you want, but total freedom has a price. You will
  1292.     need to know and understand how to use a text editor. This isn't
  1293.     difficult if you are familiar with using a word processor. And you will
  1294.     need to have a basic understanding of DOS and how batch files work.
  1295.     
  1296.     With a text editor you can create a menu file which is a text file with
  1297.     an MNU extension. Or, you can copy and then modify the text file
  1298.     QUICK.MNU which displays the menus you see when MarxMenu is executed.
  1299.     This text file contains a set of instructions for MarxMenu to follow.
  1300.     MarxMenu will then read your menu file and run the instructions.
  1301.     
  1302.      A menu file might look as follows:
  1303.     
  1304.      DrawBox 31 5 18 4
  1305.      UseArrows
  1306.      Writeln   '  W - WordStar'
  1307.      Write     '  L - Lotus'
  1308.     
  1309.      OnKey 'W'
  1310.         CD\WORDSTAR
  1311.         WS
  1312.     
  1313.      OnKey 'L'
  1314.         CD\LOTUS
  1315.         LOTUS
  1316.     
  1317.     The above example is a fully working MarxMenu program. Just because
  1318.     MarxMenu has 750 commands doesn't mean you have to use them all. The
  1319.     reason there are so many commands is that people keep calling and asking
  1320.     if we can add such and such. Most of the time we do. That's why the
  1321.     manual gets behind sometimes.
  1322.     
  1323.     The instructions must be from the vocabulary of words that MarxMenu
  1324.     understands. These words make up the command list included in this
  1325.     manual. They must be used precisely as the instructions in this manual
  1326.     tell you to use them. This process is called programming.
  1327.     
  1328.     I know that for many of you the word programming is a scary word. Put
  1329.     your fears at ease, MarxMenu is one of the easiest programming languages
  1330.     there is. It is a little harder than writing batch files and a lot
  1331.     easier than Basic. It requires a working knowledge of DOS and an
  1332.     understanding of writing batch files as explained in your DOS manual.
  1333.     
  1334.  
  1335.     Computer Tyme * MarxMenu * Users Manual                 Page #11
  1336.     -----------------------------------------------------------------
  1337.     
  1338.     The point that we want to make is, do not let the fear of learning and
  1339.     the fear of programming prevent you from learning to write your own
  1340.     menus. If you have never touched a computer before and are sitting down
  1341.     with your first PC, read the manuals first. Become familiar with the
  1342.     MS-DOS operating system. Learn how to write batch files, make
  1343.     subdirectories, copy files, format floppies, etc. If you don't
  1344.     understand something, ask a friend. All of us had to learn sometime, and
  1345.     there is no such thing as a stupid question.
  1346.     
  1347.     After you have mastered some of the basic concepts of the operating
  1348.     system, then learn MarxEdit. This is the text editor included with your
  1349.     MarxMenu program. Use it to write your own batch files. Then attempt to
  1350.     write your own menus by modifying the sample menus (files with a MNU
  1351.     extension) which come with MarxMenu. Print these menus and study them,
  1352.     referring to this manual or MarxHelp for help on command definitions.
  1353.     You do not have to completely understand them to start making changes.
  1354.     Programming is a trial and error process.
  1355.     
  1356.     A computer, like a musical instrument, is only as good as the player.
  1357.     The more you learn about it the more you'll find it can do. In fact, a
  1358.     computer can help raise your effective IQ as you learn the disciplines
  1359.     of logic and reason. As a hammer is a tool of the hand, enhancing your
  1360.     physical strength, a computer is a tool of the mind, enhancing your
  1361.     mental strength. You will learn that as you develop a relationship with
  1362.     your computer, that you will be able to process information in ways you
  1363.     never dreamed.
  1364.     
  1365.     MarxMenu is an excellent learning tool. By the time you become
  1366.     proficient with the menu language, you will have learned the fundamental
  1367.     concepts behind the MS-DOS operating system. You will find yourself
  1368.     going back and forth between this manual and the DOS manual that came
  1369.     with your computer. When you master the language, you will have enough
  1370.     computing skills to be a real resource in your office environment. In
  1371.     this day and age, knowing how to "make the damn things work" is a key in
  1372.     moving up the corporate ladder.
  1373.     
  1374.     If you have sufficient excess income to afford a personal computer, or
  1375.     are in a job that provides you with a workstation, you are smart enough
  1376.     to learn this program. All it requires is that you take the time. You
  1377.     can do it. It is worth your time, and you will make up the time spent in
  1378.     the results you'll get. Good luck and enjoy.
  1379.     
  1380.     
  1381.      WHAT MARXMENU DOES
  1382.     
  1383.     So with hundreds of menus on the market, what makes this one so great.
  1384.     Well, let me tell you about it. MarxMenu is a menu language rather than
  1385.     a fill in the blank kind of menu. MarxMenu gives you total control of
  1386.     your computer system.
  1387.     
  1388.  
  1389.     Computer Tyme * MarxMenu * Users Manual                 Page #12
  1390.     -----------------------------------------------------------------
  1391.     
  1392.     It is also a job control language allowing you to program processes too
  1393.     difficult to do with batch files. MarxMenu can be used to do anything
  1394.     from overnight batch job processing to generating control scripts for
  1395.     mainframes.
  1396.     
  1397.     Because of it's simple syntax, MarxMenu makes an excellent teaching
  1398.     language putting more programming power in the hands of the student
  1399.     programmer than any other programming language.
  1400.     
  1401.     As a menu, MarxMenu can be as simple or as complex as you want. If you
  1402.     want simple, nothing is easier. If you want POWER, nothing is more
  1403.     powerful. If you want to get really weird, MarxMenu can do really weird.
  1404.     
  1405.     So if you want the menu to remind you to go vote, MarxMenu knows when
  1406.     the first Tuesday after the first Monday in November on even years is.
  1407.     If you are into Astrology, and you want certain menu items to appear
  1408.     only if Mars is in the right place in the sky, MarxMenu can calculate
  1409.     the orbit of Mars for you.
  1410.     
  1411.     MarxMenu can be used to program games, write running software demos and
  1412.     online tutorial programs. It can be used to write testing programs. It
  1413.     can be used to write custom software installation programs. It can be
  1414.     used to assist other applications to make other software more network
  1415.     friendly.
  1416.     
  1417.     MarxMenu has a compiler for high speed execution. Even very large menus
  1418.     come up in under 4 seconds on a 4.77mhz IBM XT on an ArcNet lan. The
  1419.     compiler also provides security in that you can keep your source files
  1420.     separate so no one can alter the menu files.
  1421.     
  1422.     
  1423.      THE MARX.BAT FILE
  1424.     
  1425.     In order for MarxMenu to work, a MARX.BAT file must be created. This is
  1426.     done by typing INSTALL. The first thing that INSTALL does is unpack the
  1427.     compressed menu files and documentation files. Then it will bring up the
  1428.     installation menu.
  1429.     
  1430.     The MARX.BAT file looks like this:
  1431.     
  1432.      @ECHO OFF
  1433.      C:\MARX\MARXMENU.EXE %1
  1434.      %MXCMD%
  1435.      MARX %1
  1436.     
  1437.     The first line of MARX.BAT turns the echo off. This may be changed to
  1438.     ECHO ON for debugging purposes. PAUSE commands can be inserted to debug
  1439.     a menu. This allows you to see what's going on.
  1440.     
  1441.  
  1442.     Computer Tyme * MarxMenu * Users Manual                 Page #13
  1443.     -----------------------------------------------------------------
  1444.     
  1445.     The second line of MARX.BAT runs MARXMENU.EXE. The second parameter %1
  1446.     is the name of the menu file to run. A third parameter can be added to
  1447.     tell MarxMenu to use a specific directory for creating temporary batch
  1448.     files. Otherwise MarxMenu will create temporary batch files in the same
  1449.     directory as MARXMENU.EXE.
  1450.     
  1451.     When the user selects a program to run, MarxMenu writes a temporary
  1452.     batch file which contains within it the commands to run the program.
  1453.     Then MarxMenu writes a command to the environment variable MXCMD to
  1454.     execute the temporary batch file and exits.
  1455.     
  1456.     What it writes depends on the version of DOS you are running. If you are
  1457.     running DOS 3.3 or later, MXCMD is set to CALL <batch>. If you are
  1458.     running an earlier version of DOS then MXCMD is set to COMMAND /C
  1459.     <batch>.
  1460.     
  1461.     Whatever command is written to MXCMD is executed in line 3. This usually
  1462.     calls the temporary batch file that MarxMenu created. This executes your
  1463.     program and returns to MARX.BAT.
  1464.     
  1465.     Line four jumps back to the beginning of the batch file and starts all
  1466.     over. %0 is MARX.BAT and %1 is the name of the menu you are running.
  1467.     
  1468.              MARX.BAT
  1469.              --------   +--MarxMenu Creates--+
  1470.       +----> @ECHO OFF  |                    |
  1471.       |      MARXMENU.EXE %1                 |
  1472.       |      %MXCMD% >--+                    +-> $MX00000.BAT
  1473.       | +--> MARX %1 +  |                        ------------
  1474.       | |            |  +----------------------> CD\WORDSTAR
  1475.       +-|------<-----+                           WS --+
  1476.         |                                             |
  1477.         +-------------------------------------------<-+
  1478.     
  1479.      Note: MarxMenu sets MXCMD = CALL $MX00000.BAT
  1480.     
  1481.     You can also tell MarxMenu where to put it's temporary batch files by
  1482.     setting an environment variable TEMP to point to a temporary file
  1483.     directory.
  1484.     
  1485.      Example:
  1486.        SET TEMP=F:\TMPFILES
  1487.     
  1488.     This is compatible with the way DOS 5 and Windows uses temp files.
  1489.     
  1490.     When you exit the menu system. MarxMenu sets MXCMD to MXSTOP. This jumps
  1491.     to a batch file called MXSTOP which gets you out of MARX.BAT. MXSTOP.BAT
  1492.     can be modified to control what happens when MarxMenu is exited.
  1493.     
  1494.  
  1495.     Computer Tyme * MarxMenu * Users Manual                 Page #14
  1496.     -----------------------------------------------------------------
  1497.     
  1498.     The default MXSTOP.BAT file is as follows.
  1499.     
  1500.      SET MXCMD=
  1501.      SET KSV=
  1502.      REM You can control menu exiting with this file!
  1503.     
  1504.     Note that by adding your own commands to MXSTOP that you can control
  1505.     what happens when you exit. You could loop right back to the menu if you
  1506.     want. Or, you could force a controlled network logoff.
  1507.     
  1508.     I strongly recommend upgrading to DOS 3.3 or later whenever it is
  1509.     possible to do so.
  1510.     
  1511.     The name of the temporary batch file is as follows:
  1512.     
  1513.                       $MX00000.BAT
  1514.                           ||||
  1515.             Shells--------+|++--------Network Station (Hex)
  1516.                       Task Number
  1517.     
  1518.     The five zeros are used for single user versions of MarxMenu. On a network
  1519.     they change as follows:
  1520.     
  1521.     The last two zeros is the station number on the network. This is either
  1522.     read directly from the shell, if you are using Novell, or from the
  1523.     environment variable STATION if you are on another network. The third
  1524.     zero is the task number if you are running DesqView, or from an
  1525.     environment variable TASK if you are running some other multitasker.
  1526.     
  1527.     The second zero is replaced by one less than the number of COMMAND.COM
  1528.     shells you are running. This way if you run COMMAND.COM under MarxMenu
  1529.     and then run MarxMenu again under that, it doesn't get lost when you
  1530.     exit.
  1531.     
  1532.     The first zero is for future expansion. In case something comes along
  1533.     that we haven't thought of.
  1534.     
  1535.     If you want to do custom tricks, MarxMenu has an internal variable
  1536.     called MxCmd. Setting this to your own command overrides the way
  1537.     MarxMenu would normally use it.
  1538.     
  1539.     But now you ask, does MarxMenu leave a trail of batch files that will
  1540.     clutter up my drive or network? Not at all. MarxMenu keeps using the
  1541.     same names over and over again. If a user crashed his system, it might
  1542.     leave a batch file but it would be overwritten the next time he used the
  1543.     menu. Not only that, all batch files can be kept in the same directory
  1544.     so cleaning up is as simple as typing DEL $MX*.BAT!
  1545.     
  1546.  
  1547.     Computer Tyme * MarxMenu * Users Manual                 Page #15
  1548.     -----------------------------------------------------------------
  1549.     
  1550.     By writing to the MXCMD variable you can run an EXE or COM file directly
  1551.     without having to create another batch file.
  1552.     
  1553.      Example:
  1554.         OnKey 'M'
  1555.            |MxCmd = 'RAMMAP'
  1556.     
  1557.     This runs RamMap directly from the MARX.BAT file.
  1558.     
  1559.     Another trick is to run another batch file without the CALL statement.
  1560.     This creates a one-way jump to another batch file.
  1561.     
  1562.     Another debugging feature. You can change the first line of the MARX.BAT
  1563.     file as follows:
  1564.     
  1565.      @ECHO %MXECHO%
  1566.     
  1567.     This allows you to turn the echo on for debugging purposes by typing:
  1568.     
  1569.      SET MXECHO=ON
  1570.     
  1571.     This way you don't have to change the MARX.BAT file to debug. If you use
  1572.     this, make sure that MXECHO is set to either ON or OFF.
  1573.     
  1574.     
  1575.      DROPTO.BAT
  1576.     
  1577.     If you are going to run a shell like COMMAND.COM under MarxMenu it is
  1578.     sometimes better to use DROPTO.BAT which is created during the install
  1579.     process. DropTo allows you to jump from the temporary batch file that
  1580.     MarxMenu creates to DropTo, which deletes the temporary batch file and
  1581.     executes the rest of the command line.
  1582.     
  1583.      Usage: DROPTO %0 COMMAND.COM
  1584.     
  1585.     If you are using DropTo inside a MarxMenu, the %0 is automatically added
  1586.     for you.
  1587.     
  1588.      Example:
  1589.         OnKey 'C'
  1590.            DropTo COMMAND.COM
  1591.     
  1592.      DROPTO.BAT
  1593.      ----------
  1594.      DEL %1
  1595.      SET KSV=
  1596.      SET MXCMD=
  1597.      %2 %3 %4 %5 %6 %7 %8 %9
  1598.     
  1599.  
  1600.     Computer Tyme * MarxMenu * Users Manual                 Page #16
  1601.     -----------------------------------------------------------------
  1602.     
  1603.     Here's how it works:
  1604.     
  1605.          $MX00000.BAT <------deletes this file--------+
  1606.          ------------                                 |
  1607.          DROPTO %0 COMMAND.COM ------------> DEL %1 >-+
  1608.                                              SET KSV=
  1609.                                              SET MXCMD=
  1610.                   %2 executes COMMAND.COM--> %2 %3 %4 %5 %6 %7 %8 %9
  1611.     
  1612.     The advantages are that the temporary batch file is eliminated so if the
  1613.     user never returns to the menu, it leaves no temporary file to clutter
  1614.     up the drive. Also, DROPTO.BAT becomes the pending batch file that is
  1615.     running rather than the temporary file.
  1616.     
  1617.     
  1618.      SUPPORT FOR EARLY DOS VERSIONS
  1619.     
  1620.     There are two main differences between DOS versions earlier than 3.3 and
  1621.     versions 3.3 and above. One is the CALL command for batch files and the
  1622.     other is the way you specify environment space when using COMMAND.COM.
  1623.     
  1624.     I have enhanced the support for early DOS versions (3.1, 3.2). MarxMenu
  1625.     executes COMMAND /C /E:nn (batchfile) >NUL to have one batch file call
  1626.     another. The first two lines of the batch files created are as follows:
  1627.     
  1628.      ECHO OFF
  1629.      CTTY CON
  1630.      ....
  1631.     
  1632.     This eliminates the ECHO OFF from being seen.
  1633.     
  1634.     Also whenever possible, when MarxMenu loads up a copy of COMMAND.COM, it
  1635.     adds the /E:nnn command to set the environment space to the same as that
  1636.     of the Master Environment. In version 3.1 it is translated to paragraphs
  1637.     instead of bytes.
  1638.     
  1639.     One thing to note in early versions of DOS. If you run a batch file
  1640.     under COMMAND /C and your batch file has SET commands to set environment
  1641.     variables, the changes you make will disappear as soon as you get back
  1642.     to MARX.BAT. Why? Because you loaded another COMMAND.COM and the SET
  1643.     commands set its environment. When this COMMAND.COM ends, it takes its
  1644.     environment with it. Under DOS 3.3 or later, which uses CALL instead of
  1645.     another shell, the SET commands live. (Yet another reason to upgrade).
  1646.     
  1647.  
  1648.     Computer Tyme * MarxMenu * Users Manual                 Page #17
  1649.     -----------------------------------------------------------------
  1650.     
  1651.      ABOUT ENVIRONMENT VARIABLES
  1652.     
  1653.     I've been talking a lot about environment variables. Some of you out
  1654.     there in novice land don't know what an environment variable is. Many
  1655.     others don't know the intricate secrets handed down from the Great DOS
  1656.     Masters who know all the intricate undocumented features of DOS.
  1657.     
  1658.     Your DOS shell, COMMAND.COM owns an area of memory called the Master
  1659.     Environment. It contains strings in the form Name=Value. Included among
  1660.     those strings are your COMSPEC and your PATH. Your COMSPEC tells DOS and
  1661.     other programs where to find COMMAND.COM. Your PATH tells DOS and other
  1662.     programs what directories to search when loading programs. Another
  1663.     common environment variable is your PROMPT. This controls what your DOS
  1664.     prompt will look like.
  1665.     
  1666.     Environment variables are commonly set using the SET command. This is
  1667.     done by typing SET NAME=VALUE.
  1668.     
  1669.      Example:
  1670.         SET COLOR=BLUE
  1671.     
  1672.     So what does this actually do? Actually nothing, unless you have a
  1673.     program that reads the environment variables that is looking for one
  1674.     called COLOR. This way, environment variables can be used to leave
  1675.     messages to other programs and control how they behave.
  1676.     
  1677.     Besides leaving messages, environment variables can be accessed by batch
  1678.     files. If you use %NAME% in a batch file, DOS will substitute the VALUE
  1679.     of the variable for the %NAME% expression. And this feature is important
  1680.     to MarxMenu's operation.
  1681.     
  1682.     MarxMenu uses an environment variable called MXCMD. In the MARX.BAT file
  1683.     the third line is %MXCMD%. So MarxMenu controls MARX.BAT by writing
  1684.     values to MXCMD.
  1685.     
  1686.     In order to do this, there must be enough room in the environment for
  1687.     the command to fit. That is why you need to make sure that you have a
  1688.     SHELL command in your CONFIG.SYS to set space for MarxMenu to use.
  1689.     
  1690.     Now so far I've only talked about the Master Environment. That's the one
  1691.     that the first COMMAND.COM owns. Each program that is loaded, including
  1692.     TSR's, gets a copy of the Master Environment in its own environment. This
  1693.     is called the CURRENT Environment.
  1694.     
  1695.     One interesting feature of the Current Environment is that it is smaller
  1696.     than the Master Environment. DOS only creates enough space to hold a
  1697.     copy of the space used in the Master Environment and a little more to
  1698.     store the name of the program that is running.
  1699.     
  1700.  
  1701.     Computer Tyme * MarxMenu * Users Manual                 Page #18
  1702.     -----------------------------------------------------------------
  1703.     
  1704.     If one program executes another program, the environment of the parent
  1705.     program is called the Parent Environment. You will probably never need
  1706.     to deal with the Parent Environment but MarxMenu can access it in case
  1707.     you do.
  1708.     
  1709.     Another environment is the SHELL ENVIRONMENT. This is the one that THEY
  1710.     never talk about. The one you'll never read about in any books. The one
  1711.     you'll never learn about in any DOS classes. This is the one your
  1712.     parents never mentioned.
  1713.     
  1714.     The Shell Environment is normally the same as the Master Environment.
  1715.     But, if you are running more than one level of COMMAND.COM, the Shell
  1716.     Environment is the environment of the last COMMAND.COM in memory. This
  1717.     environment is the most important environment to MarxMenu.
  1718.     
  1719.     So why load up two or more COMMAND.COM's? There are several cases where
  1720.     this could occur. One case is when you want to run COMMAND.COM as a
  1721.     program under MarxMenu. This way you can type EXIT to get back to the
  1722.     menu. If you do this and then run MarxMenu again, you have two levels of
  1723.     COMMAND.COM. In this case, the first COMMAND.COM is the Master
  1724.     Environment and the second COMMAND.COM is the Shell Environment.
  1725.     
  1726.     Another place where more than one COMMAND.COM is used is if you are
  1727.     running Microsoft Windows 3 or DesqView. Both of these programs are able
  1728.     to run a DOS shell. When you do, this is a second level of COMMAND.COM.
  1729.     
  1730.     What is important is that SET commands and %NAME% commands in batch
  1731.     files deal only with the Shell Environment and not the Master
  1732.     Environment.
  1733.     
  1734.     MarxMenu can treat environment variables as if they were MarxMenu
  1735.     variables. By writing to environment variables you can store information
  1736.     that stays there even if you leave MarxMenu and return.
  1737.     
  1738.      Example:
  1739.        Writeln %PATH%
  1740.        %PATH% = 'C:\;C:\DOS;'
  1741.     
  1742.     
  1743.      DEALING WITH MULTIPLE DOS SHELLS
  1744.     
  1745.     If you are running more than one level of COMMAND.COM (Shelling from
  1746.     Windows, DesqView, Word Perfect Office) and having environment space
  1747.     problems here's a trick. Before you load up your fancy shells, put this
  1748.     in a batch file like your AUTOEXEC.BAT.
  1749.     
  1750.      SET MXCMD=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  1751.     
  1752.     This variable will be trashed by MarxMenu thus freeing up the
  1753.     environment space it occupied. This will not only allow MarxMenu to run
  1754.     but may solve problems with other programs you are running that need
  1755.     environment space as well.
  1756.     
  1757.  
  1758.     Computer Tyme * MarxMenu * Users Manual                 Page #19
  1759.     -----------------------------------------------------------------
  1760.     
  1761.     Another option is, if you can control how the second shell is run, add
  1762.     the /E switch to the command line of COMMAND.COM to force a larger
  1763.     default environment space.
  1764.     
  1765.      Example:
  1766.         COMMAND.COM /E:400
  1767.     
  1768.     
  1769.      MARXMENU AND TSR CONTROL
  1770.     
  1771.     MarxMenu along with the TSR utilities that come with MarxMenu, can load
  1772.     and unload TSR's under menu control. This is handy when you want to run
  1773.     a big application and need to free up some memory to do it. Since
  1774.     MarxMenu is a zero k menu system, unloading TSR's is possible but it
  1775.     has it's tricks.
  1776.     
  1777.     The problem you run into is that when one batch file calls another batch
  1778.     file, the way MarxMenu normally runs, DOS creates a small batch file
  1779.     control block in memory. This control block stays in memory after the
  1780.     TSR is released creating a region of trapped memory. Although this
  1781.     memory is freed, it isn't usable.
  1782.     
  1783.     The way around it is to jump to the batch file that releases memory
  1784.     instead of calling it. This is done by setting MXCMD to the name of the
  1785.     batch file you want to run. The only problem is that when you jump to
  1786.     the other batch file, it won't automatically return to MARX.BAT. You
  1787.     must therefore end your batch file with a command bringing you back to
  1788.     MARX.BAT.
  1789.     
  1790.      MEMHOG.BAT
  1791.      -----------
  1792.      Rem UnLoad SideKick
  1793.      RELEASE SK
  1794.      CD\MEMHOG
  1795.      MEMHOG
  1796.      MARK SK
  1797.      SK
  1798.      MARX MAIN
  1799.     
  1800.     In your MAIN menu:
  1801.     
  1802.      OnKey 'H'
  1803.         |MxCmd = MEMHOG
  1804.     
  1805.     See the documentation file on the TSR utilities disk for more
  1806.     information on how to use MARK and RELEASE.
  1807.     
  1808.  
  1809.     Computer Tyme * MarxMenu * Users Manual                 Page #20
  1810.     -----------------------------------------------------------------
  1811.     
  1812.      NETWORK USERS:
  1813.     
  1814.     The main thing you have to worry about on a network is to make sure that
  1815.     when MarxMenu creates a temporary batch file, that it is a different one
  1816.     for each user on the network.
  1817.     
  1818.     This is handled several ways. If you are on a Novell network, MarxMenu
  1819.     uses your station number as part of the name for the temporary batch
  1820.     file. If you are not using Novell, then you will need to set an
  1821.     environment variable STATION for each workstation on your net. Each one
  1822.     has to be a different number.
  1823.     
  1824.      Example:
  1825.         SET STATION=5
  1826.     
  1827.     You must ensure that the user has enough access rights to create
  1828.     temporary batch files in the directory selected for temporary batch
  1829.     files. One solution is to create a batch file directory and give all the
  1830.     users full access rights to it.
  1831.     
  1832.     MarxMenu has been run on about every DOS based network that exists. If
  1833.     the network runs at all it will generally run MarxMenu. Among the
  1834.     networks that come to mind are Novell, Lantastic, Banyan, 3COM, Lan
  1835.     Manager, IBM, DECNET, ConCurrent DOS, PCMOS, and SCO VPIX. MarxMenu is
  1836.     running on networks as small as two users to as large as 20,000 users.
  1837.     In fact, the bigger your network, the more you need MarxMenu.
  1838.     
  1839.     If you are running LANTASTIC and get a "sharing violation" error when
  1840.     two people try running the menu at the same time, try setting
  1841.     MARXMENU.OVR to READ ONLY.
  1842.     
  1843.     
  1844.      NETWORK MENU STRATEGY
  1845.     
  1846.     One of the main features of MarxMenu is the ability to create "smart"
  1847.     menus. This allows you to have a single menu that everybody runs but
  1848.     each user sees different selections based on what their access rights
  1849.     are, what groups they are in, what kind of hardware is available, or
  1850.     what workstation they are on.
  1851.     
  1852.     The group access feature is a very good example of using the power of
  1853.     MarxMenu. The idea here is that for instance under Novell you would put
  1854.     users in groups and have menu selections appear based on group
  1855.     membership. Thus only the accounting department sees the payroll
  1856.     selection.
  1857.     
  1858.     On non Novell networks you can group users by having them in a text file
  1859.     list of members. Then you can read the list and test if they are in the
  1860.     list. You can also read environment variables and control choices based
  1861.     on the result.
  1862.     
  1863.  
  1864.     Computer Tyme * MarxMenu * Users Manual                 Page #21
  1865.     -----------------------------------------------------------------
  1866.     
  1867.     The rule with networks is to keep things as consistent and simple as
  1868.     possible. A simple well documented network is a happy network, and it
  1869.     can make the difference whether you go home on the weekends or stay at
  1870.     the office.
  1871.     
  1872.     
  1873.      USING TRUENAME ON NETWORKS
  1874.     
  1875.     Besides using drive letters, networks use a file and directory naming
  1876.     convention called TrueName. The MarxMenu TrueName function returns the
  1877.     true name of a file. TrueName files are specified as follows:
  1878.     
  1879.      Microsoft Networks:
  1880.        \\SERVER\DIRECTORY\FILE
  1881.     
  1882.      Novell Netware:
  1883.        \\SERVER\VOLUME\DIRECTORY\FILE
  1884.     
  1885.     By using TrueNames you can specify files and directories on the network
  1886.     without having to map drive letters or make redirection list entries. If
  1887.     a TrueName of a string ends in a '\' then it is at the root directory.
  1888.     
  1889.      Example:
  1890.        C:\                ;root of C
  1891.        \\TYME\SYS\        ;root of server
  1892.        \\TYME\SYS\PUBLIC  ;not root directory
  1893.     
  1894.     
  1895.      NOVELL USERS:
  1896.     
  1897.     Novell is the most popular network on the market. We have added many
  1898.     enhancements for Novell networks to support things like logging in and
  1899.     logging out, drive mapping, group support, software metering, and status
  1900.     information.
  1901.     
  1902.     Although Novell is a high quality solid product it has its own
  1903.     "Personality" and many undocumented features otherwise known as bugs.
  1904.     Most people who are having trouble with MarxMenu under Novell are really
  1905.     having trouble with Novell. Quite frankly, we do more Novell support
  1906.     than we do MarxMenu support.
  1907.     
  1908.     Having said that, we have two Novell networks. One at the lab and one at
  1909.     the authors home and we love networks. But, we have spent hundreds of
  1910.     hours learning all the tricks. And to save you a phone call, and a lot
  1911.     of time, we've decided to share these tricks here in the manual.
  1912.     
  1913.     Some of these tricks are from the Great Network Gurus themselves who are
  1914.     so advanced that they no longer exist in physical form. These people
  1915.     live in another dimension of total mental existence and can only be
  1916.     reached by modem. Some of them hang out on Compuserve.
  1917.     
  1918.  
  1919.     Computer Tyme * MarxMenu * Users Manual                 Page #22
  1920.     -----------------------------------------------------------------
  1921.     
  1922.     We therefore strongly recommend that if you are a serious Novell user
  1923.     that you join Compuserve and hang out in the Novell section. And just
  1924.     because not everyone on Compuserve is a real person doesn't mean that
  1925.     you should feel uncomfortable asking them any question about your
  1926.     network that you need to ask.
  1927.     
  1928.     
  1929.      THE NOVELL MENU TRANSLATOR
  1930.     
  1931.     One nice bonus with Novell networks is that MarxMenu can translate your
  1932.     Novell menus to MarxMenu. This saves you the time of having to recode
  1933.     your system. What you do is type:
  1934.     
  1935.      MARXMENU NOVTRANS <menu>   <- Right Way
  1936.      MARX NOVTRANS <menu>       <- Wrong Way
  1937.     
  1938.     This translates your Novell MNU file to a MarxMenu file. Your MNU file
  1939.     is renamed with an NOV extension.
  1940.     
  1941.     Once the menu is translated you run it by typing MARX <menu> instead of
  1942.     MENU <menu>. MarxMenu can run Novell's menu better than Novell runs
  1943.     their own.
  1944.     
  1945.     Sometimes the translator isn't perfect and it takes a little tweaking of
  1946.     the original menu file for the translator to work properly. If you have
  1947.     problems translating a menu we would like you to send us a copy of your
  1948.     original menu so that we can improve the translator.
  1949.     
  1950.     After you are satisfied with the translation you can then start
  1951.     enhancing your menus by editing the new translated menus. You might want
  1952.     to run QUICKNOV and look at it's features. If you like what you see you
  1953.     can use your editor to cut and paste code from QUICKNOV.MNU into your
  1954.     menus.
  1955.     
  1956.     You can also start adding InGroup commands to create conditional menus.
  1957.     Under MarxMenu you can have one single smart menu for everybody instead
  1958.     of a lot of individual menus.
  1959.     
  1960.      Example:
  1961.        if InGroup('ACCOUNTING')
  1962.           AddChoice('Payroll',10)
  1963.        endif
  1964.     
  1965.     The translated menu is set up with a lot of features that you can add
  1966.     that the original Novell menu wouldn't do. These features include
  1967.     software metering and usage logging (See METER.INC for details). You can
  1968.     also control screen blanking and add password security for unblanking
  1969.     the screen. MarxMenu can be set up to log you off the network after a
  1970.     period of inactivity (See CUSTOM.INC for details).
  1971.     
  1972.  
  1973.     Computer Tyme * MarxMenu * Users Manual                 Page #23
  1974.     -----------------------------------------------------------------
  1975.     
  1976.     The translated menu also allows you to select various look and feel
  1977.     options by selecting NOVELL.INC, BLOCK.INC or GRID.INC. These three
  1978.     files are similar and you can edit them to change the colors of your
  1979.     menu interface.
  1980.     
  1981.     One thing to remember is that when you change an include file you need
  1982.     to force MarxMenu to recompile the menu. It doesn't automatically
  1983.     recompile like it does when you change the main menu file. To force
  1984.     MarxMenu to recompile you just type MARXCOMP <menu> or delete the MRX
  1985.     file. (The MRX file is the compiled file that MarxMenu uses to actually
  1986.     run your menus.)
  1987.     
  1988.     
  1989.      LOGGING OUT UNDER MENU CONTROL
  1990.     
  1991.     Logging out under menu control is one of the trickiest things to do. The
  1992.     problem is that as soon as LOGOUT executes, you no longer have access to
  1993.     the network. This means that if you are in a batch file, you are going
  1994.     to get a "Missing Batch File" error, unless the batch file is in the
  1995.     \LOGIN directory.
  1996.     
  1997.     Another problem with logging out is making sure that your COMSPEC is
  1998.     pointing to a COMMAND.COM that is either on the local drive or in the
  1999.     \LOGIN directory. Otherwise you will get a "Cannot load COMMAND.COM"
  2000.     error.
  2001.     
  2002.     Another problem that you need to deal with is that your PATH command
  2003.     needs to be changed so that it doesn't refer to mapped drives that are
  2004.     no longer accessible.
  2005.     
  2006.     If you are logging off with a batch file, the batch file must be in the
  2007.     login directory or a local drive. If it is in the login directory your
  2008.     current drive must be the first network drive (usually F:) and this
  2009.     drive must not be map rooted to any directory.
  2010.     
  2011.     What you need to do is create a batch file in the \LOGIN directory
  2012.     called OFF.BAT.
  2013.     
  2014.      Example:
  2015.        F:\LOGIN\OFF.BAT
  2016.     
  2017.      SET COMSPEC=C:\COMMAND.COM
  2018.      LOGOUT
  2019.      C:
  2020.      PATH=C:\DOS
  2021.     
  2022.     To run this file the current directory must be F:\LOGIN. When using the
  2023.     MarxMenu command Logoff, MarxMenu changes to the \LOGIN directory of the
  2024.     first network drive, removes any map roots on this drive, and runs
  2025.     OFF.BAT.
  2026.     
  2027.  
  2028.     Computer Tyme * MarxMenu * Users Manual                 Page #24
  2029.     -----------------------------------------------------------------
  2030.     
  2031.     Setting up an OFF.BAT file is compatible with MarxMenu's automatic
  2032.     network logoff feature. This is where you can set the amount of time to
  2033.     wait at a menu before it automatically logs you off the network.
  2034.     
  2035.     Another way to logout under MarxMenu is to stuff the LOGOUT command into
  2036.     the keyboard buffer and exit MarxMenu.
  2037.     
  2038.      Example:
  2039.         OnKey ESC
  2040.           |StuffKBD 'LOGOUT' + CR
  2041.           |ExitMenu
  2042.     
  2043.     Another logout trick is to use the LOGOFF utility from the Computer Tyme
  2044.     Network Survival Kit. This program automatically fixes your PATH and
  2045.     COMSPEC after the logoff occurs.
  2046.     
  2047.     
  2048.      LOGGING IN WITH MARXMENU
  2049.     
  2050.     If there is any one thing that's trickier than logging out of a Novell
  2051.     network, its logging in. We have spent MANY hours struggling with Novell
  2052.     trying to get it right and have finally figured it out. Much of this
  2053.     comes from the Novell gurus who hang out on Compuserve and know
  2054.     everything there is to know about Novell.
  2055.     
  2056.     The first thing you need to do is make up your mind that you are going
  2057.     to do it right. The technique here might seem somewhat cumbersome, but
  2058.     it works well and will keep you out of trouble.
  2059.     
  2060.     MarxMenu has the ability to log you into a network, map your drives, and
  2061.     set your environment strings without having to touch a Novell utility to
  2062.     do so. MarxMenu can completely eliminate the need for Novell login
  2063.     scripts. The advantage to using MarxMenu in the login is that you have
  2064.     the power of over 700 commands to work with instead of just 25 or so.
  2065.     
  2066.     
  2067.      USING NOVELL'S LOGIN
  2068.     
  2069.     For those of you who want to stay with Novell's login program here are
  2070.     some tips to keep you out of trouble (And my tech support lines open).
  2071.     
  2072.     The last command in your system login script needs to be EXIT "batch
  2073.     name". This batch file will be the continuation of your login logic and
  2074.     end up jumping to the menu system. This is where TSR's can be loaded.
  2075.     
  2076.     Never load a TSR or run the menu from within a login script. Until the
  2077.     login script finishes, LOGIN.EXE is in memory and it uses over 100k.
  2078.     
  2079.     The first rule is don't use personal login scripts unless you have to.
  2080.     The simpler the login, the easier it is to maintain. Try to do as much
  2081.     as possible in the batch file you exit to.
  2082.     
  2083.  
  2084.     Computer Tyme * MarxMenu * Users Manual                 Page #25
  2085.     -----------------------------------------------------------------
  2086.     
  2087.     MarxMenu can be run from this batch file as a post login processor. In
  2088.     this case MarxMenu isn't being used as a menu but as a programming
  2089.     language that is capable of very powerful login logic. The batch file
  2090.     might look as follows:
  2091.     
  2092.      MARXMENU POST.MNU
  2093.      <load TSR's>
  2094.      MARX MAIN
  2095.     
  2096.     In POST.MNU you can set environment variables, test for directories,
  2097.     write batch files, read user lists, map drives, or any number of things
  2098.     that are useful to the login process.
  2099.     
  2100.     
  2101.      THE CONFIG.SYS FILE
  2102.     
  2103.     The place to start is the place where DOS starts when DOS boots. You
  2104.     MUST create a CONFIG.SYS file on your boot disk. The CONFIG.SYS tells
  2105.     DOS how many files and buffers to create, what device drivers to load,
  2106.     and the size of the Master Environment.
  2107.     
  2108.     Unless you are using special drivers, BUFFERS=40 and FILES=40 is a good
  2109.     place to start. STACKS 0,0 will gain you an extra 3k of RAM. But the
  2110.     most important command is the shell statement. A CONFIG.SYS file might
  2111.     look like this:
  2112.     
  2113.      SHELL=COMMAND.COM /P /E:400
  2114.      BUFFERS=40
  2115.      FILES=40
  2116.      DEVICE=ANSI.SYS
  2117.     
  2118.     This sets up enough environment space to allow MarxMenu and DOS SET
  2119.     commands to work properly. You will also want to load any other device
  2120.     drivers like QEMM386.SYS or 386MAX.SYS to take advantage of other
  2121.     features of your computer. If you don't know about CONFIG.SYS files,
  2122.     read the DOS manual.
  2123.     
  2124.     Network Note: If you don't have a local hard disk and are booting from a
  2125.     floppy drive, set BUFFERS=4. If you are booting from a diskless
  2126.     workstation, set BUFFERS=1. BUFFERS are used for local drives only and
  2127.     have no effect on network drives. You save 1k of memory for every 2
  2128.     buffers you don't use.
  2129.     
  2130.     
  2131.      THE AUTOEXEC.BAT FILE
  2132.     
  2133.     After the CONFIG.SYS is loaded the AUTOEXEC.BAT runs next. Here you load
  2134.     up your TSR's and network drivers. There are some important tricks to be
  2135.     used here as well.
  2136.     
  2137.  
  2138.     Computer Tyme * MarxMenu * Users Manual                 Page #26
  2139.     -----------------------------------------------------------------
  2140.     
  2141.     First of all, never load your network shell from your AUTOEXEC.BAT file.
  2142.     Always have it branch to another batch file called LOADNET to load the
  2143.     network shell. Use the AUTOEXEC.BAT only to load special TSR's and the
  2144.     IPX. An AUTOEXEC.BAT might look like this:
  2145.     
  2146.      @Echo Off
  2147.      Cls
  2148.      IPX
  2149.      SET NET=NETX.COM
  2150.      SET COMSPEC=O:COMMAND.COM
  2151.      LOADNET
  2152.     
  2153.     The two SET commands are very important. The first sets a variable
  2154.     called NET to NETX.COM. This will be used later in LOADNET.BAT. By using
  2155.     this variable, you can have users running many different versions of DOS
  2156.     and still use the same LOADNET.BAT file. You could also use a command
  2157.     SET NET=LOADHI EMSNETX.EXE to take advantage of advanced memory manager
  2158.     software.
  2159.     
  2160.     Another trick is to run BESTNET from the Network Survival Kit. BestNet
  2161.     will automatically pick the best network shell and set the NET
  2162.     environment variable for you. You would use the command BESTNET instead
  2163.     of SET NET=NETX.COM in the AUTOEXEC.BAT file.
  2164.     
  2165.     The SET COMSPEC=O:COMMAND.COM is important if you are booting off of
  2166.     either a floppy drive or a diskless workstation. This assumes that O:
  2167.     will eventually be mapped to a directory on the network that has a valid
  2168.     COMMAND.COM in it.
  2169.     
  2170.     It is important to set the comspec BEFORE loading your NET shell. This
  2171.     prevents a problem where Netware wants to go back to the boot disk even
  2172.     after you change the comspec. We don't know why this works but it does.
  2173.     Trust Me. If you are going to use COMMAND.COM on drive C:, ignore this
  2174.     paragraph.
  2175.     
  2176.     Now we go to the LOADNET.BAT file.
  2177.     
  2178.      @Echo Off
  2179.      %NET%
  2180.      SET NET=
  2181.      F:
  2182.      STARTUP
  2183.     
  2184.     The big concept behind LOADNET is that this file is NEVER CHANGED. You
  2185.     put in on all your workstations and in the LOGIN directory and it is
  2186.     EXACTLY THE SAME for every computer in your network. Any changes to
  2187.     individual computers are made in the AUTOEXEC.BAT file.
  2188.     
  2189.  
  2190.     Computer Tyme * MarxMenu * Users Manual                 Page #27
  2191.     -----------------------------------------------------------------
  2192.     
  2193.     So why is this important. Because if you are running diskless
  2194.     workstations what happens is that while you are booting you have a
  2195.     mythical drive A:. As soon as your NET shell loads this drive
  2196.     disappears out from under you and you end up in F:\LOGIN. If you are
  2197.     running LOADNET.BAT when this happens you drop out of A:LOADNET.BAT and
  2198.     land in the middle of F:\LOADNET.BAT. And if your LOADNET.BAT is exactly
  2199.     the same file as the LOADNET.BAT in the \LOGIN directory, you take off
  2200.     running like the transition never occurred.
  2201.     
  2202.     Even if you are not running on diskless workstations now, you might go
  2203.     to it someday. It also creates good programming habits and helps you
  2204.     boot up cleanly.
  2205.     
  2206.     Lets see what LOADNET does. The first line is @ECHO OFF, that's easy.
  2207.     The second line %NET% executes the network shell that you specified with
  2208.     the SET NET=NETX command. This actually loads the network shell. The
  2209.     third line clears the NET variable freeing up space for other
  2210.     environment variables. F: switches you to drive F if you aren't there
  2211.     already. And finally STARTUP is the name of yet another batch file you
  2212.     jump to.
  2213.     
  2214.     The STARTUP.BAT file controls what happens AFTER LOADNET runs. This file
  2215.     can be freely changed so that LOADNET.BAT can stay the same. This lets
  2216.     you modify what happens AFTER the network shell is loaded.
  2217.     
  2218.     If you are using Novell's login program STARTUP.BAT might look like
  2219.     this:
  2220.     
  2221.      @Echo Off
  2222.      LOGIN
  2223.     
  2224.     
  2225.      THE SHELL.CFG FILE
  2226.     
  2227.     The SHELL.CFG file is used by Netware to configure the Netware shell.
  2228.     You should read the manuals on this to see if you need any of the many
  2229.     options available. We suggest you at least have the following commands in
  2230.     your SHELL.CFG file.
  2231.     
  2232.      cache buffers=4
  2233.      show dots=on
  2234.     
  2235.     The master network gurus tell me that cache buffers are just a waste of
  2236.     memory and do not provide any better performance. Every 2 cache buffers
  2237.     not used saves you 1k of memory. Show dots makes your network compatible
  2238.     with more software utilities and should be set on unless you have some
  2239.     other reason not to.
  2240.     
  2241.  
  2242.     Computer Tyme * MarxMenu * Users Manual                 Page #28
  2243.     -----------------------------------------------------------------
  2244.     
  2245.      USING A MENU FILE TO LOG IN
  2246.     
  2247.     If you are going to use MarxMenu to log in instead of Novell's
  2248.     utilities, you will want to print out the sample file LOGIN.MNU on your
  2249.     MarxMenu disk and study it. Your STARTUP.BAT file might look like this:
  2250.     
  2251.      @Echo Off
  2252.      SET BOOTUP=LOGIN
  2253.      MarxMenu Login
  2254.      %BOOTUP%
  2255.     
  2256.     If MarxMenu works correctly, it will change the environment variable
  2257.     %BOOTUP% to point to a file that it creates. If for some reason it fails
  2258.     (you make a mistake in the login), it will execute Novell's login and
  2259.     let you get in and fix it.
  2260.     
  2261.     You will have to modify the LOGIN.MNU for your system. The one that I
  2262.     supply will not work on your system. It is to be used as a sample only
  2263.     and provide ideas for your login menu.
  2264.     
  2265.     One word of caution. After modifying this menu, always run MARXCOMP
  2266.     LOGIN to compile it. Otherwise, if you boot up into it you won't have
  2267.     enough access rights to recompile automatically.
  2268.     
  2269.     
  2270.      NOVELL SEARCH DRIVES
  2271.     
  2272.     MarxMenu and Network Survival Kit files need to be in the search path.
  2273.     You can copy the files into a directory that is already in the search
  2274.     path or create a new directory and add it to the search path. Here is a
  2275.     suggested setup.
  2276.     
  2277.      ---+--- SYSTEM
  2278.         |
  2279.         +--- MAIL
  2280.         |
  2281.         +--- LOGIN
  2282.         |
  2283.         +--- HOME -----+--- FRED
  2284.         |              |
  2285.         |              +--- BARNEY
  2286.         |
  2287.         +--- PUBLIC ---+--- DOS
  2288.                        |
  2289.                        +--- UTIL
  2290.                        |
  2291.                        +--- NSK
  2292.     
  2293.     I would use MAP ROOT and set up the following mapped drives:
  2294.     
  2295.  
  2296.     Computer Tyme * MarxMenu * Users Manual                 Page #29
  2297.     -----------------------------------------------------------------
  2298.     
  2299.       MAP ROOT H: = \HOME\BARNEY
  2300.       MAP ROOT U: = \PUBLIC\UTIL
  2301.       MAP ROOT N: = \PUBLIC\NSK    ;Network Survival Kit
  2302.       MAP ROOT O: = \PUBLIC\DOS
  2303.       MAP ROOT P: = \PUBLIC
  2304.     
  2305.       Set PATH=H:\;U:\;N:\;O:\;P:\;
  2306.     
  2307.     The idea here is that the user's home directory is searched first. Then
  2308.     the UTIL directory where various network goodies and batch files are
  2309.     kept. Then the NSK directory where only NSK and menu files are. Then the
  2310.     DOS directory where only your original DOS files are. And finally PUBLIC
  2311.     which contains only Novell utilities.
  2312.     
  2313.     Traditionally, with Novell networks, searches have been set up using the
  2314.     current directories of paths such as:
  2315.     
  2316.       Set PATH=H:.;U:.;N:.;O:.;P:.;
  2317.     
  2318.     I have found that since the addition of the MAP ROOT enhancement that
  2319.     this traditional method is not as flexible.
  2320.     
  2321.     
  2322.      NOVELL DRIVE MAPPING TRICKS
  2323.     
  2324.     Many applications require a search drive mapped to the applications
  2325.     directory. Instead of mapping every letter in the alphabet we have
  2326.     discovered a trick. The idea is to create a floating drive letter that
  2327.     you move into the application that needs it.
  2328.     
  2329.     I map a drive W that I call my work drive. I initially set it to the
  2330.     same directory as my home directory. But when I need an extra search
  2331.     path I set it to point to the application as follows:
  2332.     
  2333.      NovMapRoot('W','P:\WINDOWS')
  2334.     
  2335.     Using this method it isn't necessary to modify your search path. You
  2336.     always search through drive W but where W is moves with your
  2337.     applications. If you need more than one extra search drive you can have
  2338.     several floating drives.
  2339.     
  2340.     You might want to include some drive mapping commands at the beginning
  2341.     of your main menu to put the floating drives back to default
  2342.     directories. This way you don't run into problems where a menu choice
  2343.     doesn't work right after running another menu choice.
  2344.     
  2345.  
  2346.     Computer Tyme * MarxMenu * Users Manual                 Page #30
  2347.     -----------------------------------------------------------------
  2348.     
  2349.      SETTING FILE ATTRIBUTES
  2350.     
  2351.     Historically Novell has recommended setting file attributes to Shareable
  2352.     and Read Only. This was to deal with DOS 3.0 and earlier and network
  2353.     dumb programs. This is now an obsolete process and if you are in the
  2354.     habit of doing this it's time to quit (unless you are still running DOS
  2355.     version 2 on your workstations).
  2356.     
  2357.     I personally flag all my network files Normal as a way of catching
  2358.     network dumb programs.
  2359.     
  2360.     MarxMenu is a network smart product. It therefore isn't recommended that
  2361.     any file flagging be done on Computer Tyme software.
  2362.     
  2363.     
  2364.      NOVELL SEMAPHORES
  2365.     
  2366.     For a detailed explanation of Novell Semaphores, read the Novell
  2367.     manuals. What we've done is to export these functions to MarxMenu. we
  2368.     have implemented them slightly different than Novell did and have hidden
  2369.     all the nasties from you such as semaphore handles. All semaphores are
  2370.     accessed by name only.
  2371.     
  2372.     Here's a brief overview of semaphores. Semaphores are names of shared
  2373.     resources that the server keeps track of. Semaphores have three
  2374.     properties. They have a name, value and number of users. The name can be
  2375.     anything up to 48 characters long. The value is a number from -128 to
  2376.     127. If the value is less than 0, the resource the semaphore represents
  2377.     is considered used up.
  2378.     
  2379.     By opening a semaphore, you increase the number of users by one. By
  2380.     closing it, you decrease the number by one. If a single user opens a
  2381.     semaphore many times, it is only counted as one. When you log out, your
  2382.     semaphores are closed. This is also true if you turn your computer off,
  2383.     but it takes 15 minutes for the server to give up on you.
  2384.     
  2385.     The first user to open a semaphore creates it. The last user to close a
  2386.     semaphore deletes it. When a semaphore is created, a value can be
  2387.     assigned. If a semaphore is opened that already exists, the initial
  2388.     value is ignored.
  2389.     
  2390.     When NovWaitOnSemaphore is called by any user, the value is decremented.
  2391.     If the value is not below zero, NovWaitOnSemaphore returns true.
  2392.     Otherwise it returns false and the value is unchanged. The amount of
  2393.     time that NovWaitOnSemaphore will wait is controlled by the variable
  2394.     NovSemaphoreTimeOut.
  2395.     
  2396.     When NovSignalSemaphore is called by any user, the value is incremented.
  2397.     This allows other users to call NovWaitOnSemaphore and get a True value.
  2398.     
  2399.  
  2400.     Computer Tyme * MarxMenu * Users Manual                 Page #31
  2401.     -----------------------------------------------------------------
  2402.     
  2403.     NovSemaphoreUsers and NovSemaphoreValue are used to read the status of a
  2404.     semaphore without changing it's value.
  2405.     
  2406.     One of the major differences between how MarxMenu uses semaphores and
  2407.     the way Novell uses them is that normally a semaphore dies when the
  2408.     application finishes. This would normally prevent a zero k menu system
  2409.     from being able to use them. MarxMenu uses an interesting trick where it
  2410.     fools Netware into thinking that the semaphore belongs to another task.
  2411.     This allows the semaphore to live.
  2412.     
  2413.     Semaphores can be tracked using FCONSOLE. Some versions of Netware have
  2414.     a bug in FCONSOLE that reports an open count that is 256 times the real
  2415.     count. Just divide by 256 for the right number.
  2416.     
  2417.     Semaphores can be used for software metering. This allows MarxMenu to be
  2418.     aware of what other users on the network are doing. Here are the basic
  2419.     tools, what you do with them is only limited by your imagination.
  2420.     
  2421.     
  2422.      NETWARE MHS & MARXMENU
  2423.     
  2424.     MarxMenu has the ability to interface to NetWare MHS which allows
  2425.     MarxMenu to send and receive messages. You need to have a copy of
  2426.     NetWare MHS to use this feature which can be purchased from your
  2427.     friendly neighborhood NetWare dealer.
  2428.     
  2429.     MHS stands for Message Handling System and the way it works is that you
  2430.     have a dedicated mail transport computer on the network. This computer
  2431.     is like a mailman and it goes around and looks for outgoing mail every
  2432.     so often. If it finds mail it reads the address and delivers it.
  2433.     
  2434.     Any application program, such as MarxMenu, need only leave a text file
  2435.     in a special outgoing directory and put an address header on the file.
  2436.     Here's an example of how this is done:
  2437.     
  2438.      Example:
  2439.        var Message
  2440.     
  2441.        {MHS Header}
  2442.     
  2443.        AppendArray(Message,'SMF-70')
  2444.        AppendArray(Message,'FROM:MARC @ CTYME')
  2445.        AppendArray(Message,'TO:VICKI @ CTYME')
  2446.        AppendArray(Message,'SUBJECT:The Princess Called!')
  2447.     
  2448.        {Blank line separates header from message}
  2449.     
  2450.        AppendArray(Message,'')
  2451.     
  2452.  
  2453.     Computer Tyme * MarxMenu * Users Manual                 Page #32
  2454.     -----------------------------------------------------------------
  2455.     
  2456.        AppendArray(Message,'The Princess needs a ride home from dance')
  2457.        AppendArray(Message,'class and wants to get some money to go')
  2458.        AppendArray(Message,'skating. She wants to know if you can pick')
  2459.        AppendArray(Message,'them up at midnight and if 5 little girls')
  2460.        AppendArray(Message,'can stay over night.')
  2461.     
  2462.        WriteTextFile(MhsSendDirectory + '\' + UniqueFileName,Message)
  2463.     
  2464.     When MarxMenu creates a file in this format, MHS will pick up the file
  2465.     and deliver it. When it's delivered it will be like any other message
  2466.     and will appear in your favorite MHS Mail system. You can also use this
  2467.     feature to notify you when your fax server receives a fax.
  2468.     
  2469.     To receive a message, see the example under MhsReadFile. All MHS
  2470.     commands start with Mhs. By using these MHS features, MarxMenu can be
  2471.     used as a network job server that is triggered by messages sent to it
  2472.     and reports it's results by sending messages.
  2473.     
  2474.     
  2475.      UPGRADING MARXMENU
  2476.     
  2477.     When installing an upgraded version of MarxMenu be sure to copy the
  2478.     MARXMENU.EXE, MARXMENU.OVR and MARXCOMP.EXE files into your MarxMenu
  2479.     directory. A very common mistake is not copying the MARXMENU.OVR file.
  2480.     If you forget this file MarxMenu will lock up when you try to run it.
  2481.     If you are on a network and anyone on the network is using the menu you
  2482.     won't be able to copy over MARXMENU.OVR. You will have to wait until
  2483.     after hours or chase everyone off the network to install the upgrade.
  2484.     
  2485.     A common mistake occurs when you copy the MarxMenu file into a working
  2486.     directory and someone else has the MARXMENU.OVR file open and you fail
  2487.     to notice that it failed to copy. If MarxMenu starts locking up after an
  2488.     upgrade this is probably why. Make sure the file dates on MARXMENU.EXE
  2489.     and MARXMENU.OVR are the same.
  2490.     
  2491.     After installing the new MarxMenu, all your menu files will have to be
  2492.     recompiled. This should happen automatically, but if you are on a
  2493.     network and the users don't have enough access rights the compile will
  2494.     fail. You can recompile all your network menus as follows:
  2495.     
  2496.      WHEREIS *.MNU|DOLIST MARXCOMP @L
  2497.     
  2498.     If you are using MarxMenu to log into the network then be sure to copy
  2499.     the new MarxMenu files into your LOGIN directory and recompile your
  2500.     LOGIN menu.
  2501.     
  2502.     If you install MarxMenu in one directory and then move it to another you
  2503.     will have to run MARXMENU INST to recreate the batch files for that
  2504.     directory. Make sure that the MarxMenu files are on your PATH.
  2505.     
  2506.  
  2507.     Computer Tyme * MarxMenu * Users Manual                 Page #33
  2508.     -----------------------------------------------------------------
  2509.     
  2510.     Any time you upgrade, MarxMenu should work as well or better that the
  2511.     previous version. Occasionally we make a mistak so you might want to copy
  2512.     your present NSK directory to another temporary directory until the
  2513.     upgrade is complete and tested. This gives you the ability to go back to
  2514.     the old one should the need arise. This procedure should be followed on
  2515.     software upgrades from other vendors as well.
  2516.     
  2517.     
  2518.      CUSTOMIZING MARXMENU SAMPLE FILES
  2519.     
  2520.     Included in the MarxMenu package are menu files which you can easily
  2521.     modify to execute your programs and perform other functions you desire.
  2522.     Using MarxEdit, the text editor included in this package, you can modify
  2523.     and customize these menu files.
  2524.     
  2525.     Also included to demonstrate the power and versatility of the menu
  2526.     system is a game menu NIM.MNU. This is a game written in the menu system
  2527.     that demonstrates some of the logic functions and programmability of the
  2528.     system.
  2529.     
  2530.      Here's a simple example of a menu file:
  2531.      ===================================
  2532.      ClearScreen
  2533.      DrawBox 30 9 25 8
  2534.      Writeln ' 1) Lotus'
  2535.      Writeln ' 2) dBase'
  2536.      Writeln ' 3) Wordstar'
  2537.      Writeln
  2538.      Write 'Select: '
  2539.     
  2540.      OnKey '1'
  2541.         cd\lotus
  2542.         123
  2543.     
  2544.      OnKey '2'
  2545.         cd\db3
  2546.         db3
  2547.     
  2548.      OnKey '3'
  2549.         cd\wordstar
  2550.         ws
  2551.     
  2552.      ====================================
  2553.     
  2554.     Notice in looking at the "OnKey" statements that all you have to do is
  2555.     tell MarxMenu how to get to the program. Although, MarxMenu takes care
  2556.     of reloading itself after exiting a selected program, its does not
  2557.     return to its own subdirectory as many other menu programs do.
  2558.     
  2559.  
  2560.     Computer Tyme * MarxMenu * Users Manual                 Page #34
  2561.     -----------------------------------------------------------------
  2562.     
  2563.     That means that if you execute a program in another subdirectory, when
  2564.     you come back to the menu, you remain in that subdirectory. If you
  2565.     normally run your applications with a batch file, consider having
  2566.     MarxMenu change directories and execute the program for you. This will
  2567.     eliminate debugging problems caused by the actions of your batch files.
  2568.     
  2569.     
  2570.      MENU ANALYSIS
  2571.     
  2572.     Let's start a simple analysis of the example menu file shown
  2573.     above. The ClearScreen statement simply clears the screen to
  2574.     give us a fresh workspace for the menu. DrawBox is the command to
  2575.     draw a box on the screen to contain some menu text. The Writeln
  2576.     command writes a line of text to the screen within the box, then
  2577.     positions the cursor on the next line. The menu text shows the
  2578.     available selection keys that the user has access to.
  2579.     
  2580.     
  2581.      ONKEY STATEMENTS
  2582.     
  2583.     The OnKey statements control what is actually executed. OnKey
  2584.     statements also allow you to execute hidden commands when you do
  2585.     not want them to appear on the menu screen. One trick we use is to
  2586.     have an OnKey statement define a key that runs MarxEdit on my
  2587.     personal menu file. we don't show this key on the menu to keep
  2588.     others from poking around in the file. For additional security
  2589.     a password can also be set up on this key.
  2590.     
  2591.     Normally you enter a line of text as if you were creating a BAT
  2592.     file to run your application. Like batch files, if one of your
  2593.     commands is a batch file, all the statements after it will not
  2594.     execute. To prevent this you can use the CALL command to call a
  2595.     batch file in DOS 3.3 or later, or COMMAND /C in DOS 3.1 and 3.2.
  2596.     
  2597.     Normally, text displayed under an OnKey statement is the same
  2598.     text as the batch file created by MarxMenu. There are some
  2599.     exceptions. If a line starts with a "|" (vertical bar), the line
  2600.     will be interpreted by MarxMenu instead of being written to a
  2601.     batch file. This allows commands such as "PASSWORD" to be used.
  2602.     String variables can be passed as part of a batch command if the
  2603.     name of the string variable starts with a "%" symbol.
  2604.     
  2605.     The spaces preceding the commands under the OnKey statement are
  2606.     for clarity only. They are not necessary for MarxMenu to function
  2607.     properly.
  2608.     
  2609.     Sometimes you need more control over what commands actually go into the
  2610.     batch file that MarxMenu executes. You might want to input test from the
  2611.     user or have the user make a choice from a list that will become part of
  2612.     the batch file that is executed. The BAT command is used to do this.
  2613.     
  2614.  
  2615.     Computer Tyme * MarxMenu * Users Manual                 Page #35
  2616.     -----------------------------------------------------------------
  2617.     
  2618.     Lets say you want the user to enter the name of a directory to back up
  2619.     to a floppy. Here's how this might be done:
  2620.     
  2621.      Example:
  2622.        OnKey 'B'
  2623.           |DrawBox 15 10 55 3
  2624.           |Write 'Enter Directory: '
  2625.           |BackupDir = Readln
  2626.           |if (LastKey = Esc) or (not ExistDir(BackupDir))
  2627.           |   Return
  2628.           |endif
  2629.           |Bat 'XCOPY ' + BackupDir + ' A: /S'
  2630.           DIR A:
  2631.           PAUSE
  2632.     
  2633.     Notice that the commands under the OnKey statement start with a vertical
  2634.     bar. This is because they are MarxMenu commands rather than batch file
  2635.     commands. Remember you are dealing with two languages here. MarxMenu
  2636.     understands MarxMenu commands and DOS understands batch commands. When
  2637.     you are under an OnKey statement all commands are written to a memory
  2638.     buffer which are written to a batch file when MarxMenu exits. DOS then
  2639.     runs this batch file. If you start a command with a vertical bar under
  2640.     an OnKey command then MarxMenu will see the command.
  2641.     
  2642.     The BAT command is a MarxMenu command that allows you to write lines to
  2643.     the batch file that is being created. It allows you more specific
  2644.     control of execution by allowing you to include MarxMenu variables in
  2645.     the dos command.
  2646.     
  2647.     
  2648.      POPUP MENUS
  2649.     
  2650.     If you want to create a popup menu within a menu you can do so by
  2651.     using a "label". A label is a keyword preceded by a colon. To
  2652.     call the popup menu, place the keyword on a line by itself
  2653.     preceded by a carat (Shift 6). The label will precede the popup
  2654.     menu definition.
  2655.     
  2656.     For example if you have a popup menu to load Smart Software, you could
  2657.     name the PopUpMenu Smart. To bring up the Smart PopUpMenu, define a key
  2658.     in your main menu for Smart like this:
  2659.     
  2660.      OnKey 'S'
  2661.         ^Smart
  2662.     
  2663.     The Smart menu itself might look something like this:
  2664.     
  2665.      :Smart
  2666.      BoxHeaderColor ForeColor BackColor
  2667.      BoxBorderColor Yellow Green
  2668.      BoxInsideColor LCyan Green
  2669.      InverseColor Yellow Red
  2670.      BoxHeader = ' Smart Menu '
  2671.      DrawBox 45 16 20 6
  2672.      UseArrows 2 2 16 3
  2673.      ClearLine 205
  2674.      Writeln
  2675.  
  2676.     Computer Tyme * MarxMenu * Users Manual                 Page #36
  2677.     -----------------------------------------------------------------
  2678.     
  2679.      Writeln '  Data Base'
  2680.      Writeln '  Spread Sheet'
  2681.      Write   '  Word Processor'
  2682.     
  2683.      OnKey 'D'
  2684.        SM D
  2685.     
  2686.      OnKey 'S'
  2687.        |BoxHeaderColor ForeColor BackColor
  2688.        |BoxBorderColor Yellow Green
  2689.        |BoxInsideColor White Green
  2690.        |%1 = PickFile('C:\SMART\SPREAD\*.WS',4,5,17)
  2691.        SM S -ALOAD %1
  2692.     
  2693.      OnKey 'W'
  2694.        |BoxHeaderColor ForeColor BackColor
  2695.        |BoxBorderColor Yellow Green
  2696.        |BoxInsideColor White Green
  2697.        |%1 = PickFile('C:\SMART\WORD\*.DOC',4,5,17)
  2698.        SM W -ALOAD %1
  2699.     
  2700.     While developing the menu, program one of the keys to run your favorite
  2701.     editor on the menu file that you are creating. This way, as soon as the
  2702.     change is made, the results will show when you exit your editor. Since
  2703.     MarxMenu allows versatility in creating the look of your menus, a little
  2704.     trial and error will be required to make things look right.
  2705.     
  2706.     
  2707.      THE CONSOLE
  2708.     
  2709.             +---| Console Functions |---+
  2710.             | 1 - Blank Screen          |
  2711.             | 2 - Set Blank Message     |
  2712.             | 3 - Lock Keyboard         |
  2713.             | 4 - Set Blank Time        |
  2714.             +---------------------------+
  2715.     
  2716.     The Console is a popup menu of built-in functions. To activate the
  2717.     console, press the TAB key. A menu will pop-up in the upper left hand
  2718.     corner of the screen. You can change the position of this popup menu
  2719.     with the ConsolePos function.
  2720.     
  2721.     The first command on the Console screen is Blank Screen. Enter 1 and the
  2722.     screen will blank immediately. It will remain blanked until a key is
  2723.     pressed. Enter 2 on the Console menu and you can change the message
  2724.     displayed on the Blank Screen display.
  2725.     
  2726.     Enter 3 and you will be prompted for a word to lock the keyboard. After
  2727.     you enter the lock word the screen will blank and the keyboard will be
  2728.     locked until the exact lock word is typed. Enter 4 to set the number of
  2729.     minutes to wait before blanking the screen.
  2730.     
  2731.  
  2732.     Computer Tyme * MarxMenu * Users Manual                 Page #37
  2733.     -----------------------------------------------------------------
  2734.     
  2735.     The lock word feature is handy for times when you must leave the
  2736.     keyboard but don't want menu commands displayed for all to see. It also
  2737.     effectively locks the keyboard so someone can't escape to DOS and test
  2738.     the format command on your hard disk. We run this menu on a Novell
  2739.     Network and don't want to let everyone have access to the Supervisors'
  2740.     power at the touch of the escape key should we leave the keyboard.
  2741.     
  2742.     
  2743.      REPOSITIONING THE TOP WINDOW
  2744.     
  2745.     One nice feature you can use to get the windows right is to turn on the
  2746.     scroll lock. This lets you move the top window around the screen using
  2747.     the arrow keys so you can see how it looks. Then you can go into your
  2748.     menu code and set it permanently.
  2749.     
  2750.     Set Scroll Lock to "on". On most keyboards, a scroll lock LED will light
  2751.     up. Now use the arrow keys to move the top window to any position on the
  2752.     screen. Neat Huh?
  2753.     
  2754.     If you want to prevent users from moving the menus around using this
  2755.     feature, add the command, "ScrollMove Off" to your menu.
  2756.     
  2757.     
  2758.      MOUSE SUPPORT
  2759.     
  2760.     If you have a standard mouse driver, MarxMenu will detect it and use it
  2761.     automatically. The left button on the mouse is the same as pressing
  2762.     return. The right button on the mouse is the same as pressing escape.
  2763.     Pressing both buttons on the mouse is the same as pressing the tab key.
  2764.     As of now, I'm not yet using the center button on the mouse for
  2765.     anything.
  2766.     
  2767.     The sensitivity of the mouse can be controlled using the MouseHorizontal
  2768.     and MouseVertical commands or by setting environment variables MOUSEX
  2769.     and MOUSEY.
  2770.     
  2771.     
  2772.      STARTING OFF THE EASY WAY
  2773.     
  2774.     For those of you who want to just get a menu going and don't want
  2775.     anything complicated we have included a menu called the LEVEL1 menu.
  2776.     This menu is a fill in the blank type of menu that will get you going
  2777.     quickly and easily.
  2778.     
  2779.     This menu requires no programming and explains itself. You run it by
  2780.     typing the command:
  2781.     
  2782.      MARX LEVEL1
  2783.     
  2784.     The first thing it does is scan your drive to find the directories. Then
  2785.     you just answer the questions and fill in the menu. This isn't as
  2786.     powerful as programming your own menu, but if you want something quick
  2787.     and dirty, this may be the answer for you.
  2788.     
  2789.  
  2790.     Computer Tyme * MarxMenu * Users Manual                 Page #38
  2791.     -----------------------------------------------------------------
  2792.     
  2793.     Although the LEVEL1 menu example will work on networks, it is mostly
  2794.     intended for single user use.
  2795.     
  2796.     
  2797.      ABOUT VARIABLES
  2798.     
  2799.     One of the most unusual things about MarxMenu is its variables. MarxMenu
  2800.     handles variables differently than any other programming language. For
  2801.     the experienced programmer, this may require some adjustment since it's
  2802.     like getting used to driving a Cadillac after driving a VW Beetle.
  2803.     
  2804.     All variables in MarxMenu are like an empty box that can contain
  2805.     anything. A variable can be a number, boolean, string, file, array, etc.
  2806.     The type of variable is controlled internally and the user need not
  2807.     declare variable types.
  2808.     
  2809.     Variables are created with the VAR command:
  2810.     
  2811.      Var X Y Z
  2812.     
  2813.     If the word VAR is on a line by itself, the following lines, up to a
  2814.     blank line, are considered variable names.
  2815.     
  2816.      Var
  2817.        MyAge
  2818.        YourAge
  2819.        HisAge
  2820.        HerAge
  2821.     
  2822.     Variables are initialized to null values; 0 for Numbers, False for
  2823.     Booleans, and '' for strings. Initial values can be set when the
  2824.     variable is created.
  2825.     
  2826.      Var
  2827.        X = 6
  2828.        MyName = 'Marc'
  2829.        Programmer = True
  2830.     
  2831.     Variables can change variable types. If you write a number to a string
  2832.     variable, the variable changes to a number.
  2833.     
  2834.      X = '234'
  2835.      X = Value(X)
  2836.     
  2837.     This is valid in MarxMenu. X now is a number and contains the value 234.
  2838.     
  2839.     When choosing variable names, it is good programming practice to choose
  2840.     long meaningful names. This allows yourself and others to be able to
  2841.     read menus and follow the logic more easily.
  2842.     
  2843.  
  2844.     Computer Tyme * MarxMenu * Users Manual                 Page #39
  2845.     -----------------------------------------------------------------
  2846.     
  2847.      NUMERIC VARIABLES
  2848.     
  2849.     MarxMenu supports two kinds of numbers, 32 bit integers and real
  2850.     (floating point) numbers. Integers are whole numbers in the range of
  2851.     plus or minus 2,147,483,647. This gives you a wide range of numbers but
  2852.     no fractions.
  2853.     
  2854.     With integers the answers to division are always rounded down thus:
  2855.     
  2856.      7 / 3 = 2
  2857.     
  2858.     Numbers beginning with a '$' indicate base 16 or hex numbers.
  2859.     
  2860.      Example:
  2861.        $20 is the same as 32
  2862.     
  2863.     
  2864.      BOOLEAN VARIABLES
  2865.     
  2866.     Boolean variables are True or False. For example:
  2867.     
  2868.      var Adult
  2869.         Adult = True
  2870.         if not Adult then Write 'You must be 21 to enter.'
  2871.     
  2872.     Boolean values can be set by computation:
  2873.      Example:
  2874.         Adult = Age >= 21
  2875.     
  2876.     In this example the result of Age >= 21 is stored in the variable Adult.
  2877.     
  2878.     If you use a boolean variable by itself, MarxMenu assumes you are
  2879.     setting it to on. Thus:
  2880.     
  2881.       ClearScreenOnExit
  2882.     
  2883.     is the same as:
  2884.     
  2885.       ClearScreenOnExit On
  2886.     
  2887.     
  2888.      STRING VARIABLES
  2889.     
  2890.     String variables are limited to 255 characters.
  2891.     
  2892.     In MarxMenu, string literals are delimited by either single or double
  2893.     quotes.
  2894.     
  2895.      "This can't be yogurt!"
  2896.      'Lincoln said "Four score and seven years ago ..." '
  2897.     
  2898.  
  2899.     Computer Tyme * MarxMenu * Users Manual                 Page #40
  2900.     -----------------------------------------------------------------
  2901.     
  2902.      REAL NUMBERS
  2903.     
  2904.     So what's the difference between ordinary numbers and real numbers?
  2905.     Ordinary numbers in MarxMenu are 32 bit integers. These are numbers
  2906.     whose range is about plus or minus two billion. Integers are whole
  2907.     numbers and do not include any fractions.
  2908.     
  2909.     This is why MarxMenu has included REAL numbers (also known as Floating
  2910.     Point numbers). Real numbers in MarxMenu use BCD (Binary Coded Decimal)
  2911.     with 18 digits of accuracy. They have a range of 10 to the plus or minus
  2912.     63rd power, which means up to 63 zeros either side of the decimal point.
  2913.     This lets you work with very big and very small numbers.  MarxMenu has
  2914.     smart rounding algorithms so that 1.0 / 3 * 3 = 1.0 and not
  2915.     0.999999999999999999 like in most languages.
  2916.     
  2917.     Real numbers are specified by using a decimal point. Thus 5.0 specifies
  2918.     a real number. Most normal MarxMenu functions still require the standard
  2919.     32 bit integers. If you get the error: 'REAL found where INTEGER
  2920.     expected.' You need to use an integer.
  2921.     
  2922.     If an integer is passed where a real is expected, the integer is
  2923.     automatically converted to a real. Thus:
  2924.     
  2925.      6.0 * 3 = 18.0
  2926.     
  2927.     The Value function returns real numbers if a decimal point is used in
  2928.     the string. All the relevant math functions will work with reals as well
  2929.     as comparison operators.
  2930.     
  2931.     MarxMenu supports a variety of functions for real numbers. It has trig
  2932.     functions, log functions, and exponential functions. So why do you need
  2933.     real numbers in a menu program? We don't know. The author had a library
  2934.     and threw them in. We figure someone will need them someday.
  2935.     
  2936.     With real numbers you can do trigonometry calculations like those
  2937.     discovered by the ancient Indian chief Pythagoras who discovered what is
  2938.     now known as Pythagoras's triangle.
  2939.     
  2940.     Now We know that a lot of you were taught in Math class that Pythagoras
  2941.     was Greek. Well, it's just not so. Here is the real story:
  2942.     
  2943.     Pythagoras was an Indian chief that had three wives. Two of the wives
  2944.     were twins and weighed 120 pounds each. And they sat next to Pythagoras
  2945.     on a pair of twin deer hides.
  2946.     
  2947.     But Pythagoras also had a third wife who was a large fat woman who sat
  2948.     across from Pythagoras on a hippopotamus hide. This wife weighed 240
  2949.     pounds.
  2950.     
  2951.  
  2952.     Computer Tyme * MarxMenu * Users Manual                 Page #41
  2953.     -----------------------------------------------------------------
  2954.     
  2955.     What Pythagoras discovered was that the squaw on the hypopotamus was
  2956.     equal to the sum of the squaws on the other two hides!
  2957.     
  2958.     
  2959.      LOCAL VARIABLES
  2960.     
  2961.     MarxMenu also supports local variables. Variables declared within
  2962.     procedures become local variables. Local variables are just like global
  2963.     variables in that you can use them as multidimensional arrays. When the
  2964.     procedure finishes, all local variables are disposed.
  2965.     
  2966.     If a local variable has the same name as a global variable, the local
  2967.     variable will be used.
  2968.     
  2969.     
  2970.      DATES
  2971.     
  2972.     Dates in MarxMenu are stored as the number of seconds since January 1st
  2973.     1980. This gives MarxMenu a Date range of 68 years. By subtracting two
  2974.     dates, you get the number of seconds between two periods of time.
  2975.     
  2976.     MarxMenu has several commands that convert text strings to dates. Here
  2977.     are some examples of how MarxMenu sees text dates.
  2978.     
  2979.      Examples:
  2980.        '4-7-91'                 ;04-07-1991 00:00:00
  2981.        'April 7th, 1991 4:35pm' ;04-07-1991 16:35:00
  2982.        '12:35:23a'              ;04-07-1991 00:35:23
  2983.        '3:15'                   ;04-07-1991 03:15:00
  2984.     
  2985.     If the string can't be converted, then the variable BadDate is set to
  2986.     true.
  2987.     
  2988.     MarxMenu can also convert dates to strings by using the DateString and
  2989.     TimeString commands.
  2990.     
  2991.     
  2992.      PASSING PARAMETERS TO PROCEDURES
  2993.     
  2994.     Procedures can accept parameters by declaring variable names on the same
  2995.     line as the name of the procedure.
  2996.     
  2997.     Procedures can return variables by using the Return command. Return
  2998.     exits the procedure returning the parameters on the same line as the
  2999.     Return statement.
  3000.     
  3001.      Example:
  3002.      Procedure Factorial (X)
  3003.      var Y Z
  3004.         Y = 1
  3005.         Z = 1
  3006.         while Y <= X
  3007.            Z = Y * Z
  3008.            Y = Y + 1
  3009.         endwhile
  3010.         Writeln X ' factorial is ' Z
  3011.      EndProc
  3012.     
  3013.  
  3014.     Computer Tyme * MarxMenu * Users Manual                 Page #42
  3015.     -----------------------------------------------------------------
  3016.     
  3017.     In this example, if you were to use Factorial (5) you would get:
  3018.     
  3019.      5 factorial is 120
  3020.     
  3021.      Another example:
  3022.     
  3023.      Procedure AskYesNo (Question)
  3024.      var YesNo
  3025.         DrawBox (34 - (Length(Question) / 2)) 21 Length(Question) + 14 3
  3026.         TextColor LCyan Blue
  3027.         UseArrows Off
  3028.         Write ' ',Question,' (Y/N) '
  3029.         YesNo = UpperCase(ReadKey)
  3030.         YesNo = YesNo = 'Y'
  3031.         if YesNo
  3032.            Write 'Yes'
  3033.         else
  3034.            Write 'No'
  3035.         endif
  3036.         Wait 50
  3037.         EraseTopWindow
  3038.         Return (YesNo)
  3039.      EndProc
  3040.     
  3041.      if AskYesNo 'Do you want to continue? ' then Continue
  3042.     
  3043.     In this example, MarxMenu draws a box and asks a question and waits for
  3044.     a Yes or No answer.
  3045.     
  3046.     Arrays can be passed as parameters. Parameters are passed by value not
  3047.     by reference. This means that any changes to the passed parameter do not
  3048.     affect the original value.
  3049.     
  3050.     You can copy an array by assigning it equal to another array.
  3051.     
  3052.      Example:
  3053.        Array1 = Array2
  3054.     
  3055.     This creates Array1 with a copy of all the elements of Array2. The
  3056.     previous contents of Array1 are overwritten.
  3057.     
  3058.     
  3059.      ABOUT CONSTANTS
  3060.     
  3061.     Constants are used to give values meaningful names. By using constants a
  3062.     value can be assigned once and the constant name used throughout the
  3063.     menu program. This way, if you change the value of the constant, all the
  3064.     places where that constant is used automatically change.
  3065.     
  3066.  
  3067.     Computer Tyme * MarxMenu * Users Manual                 Page #43
  3068.     -----------------------------------------------------------------
  3069.     
  3070.     This is good programming practice.
  3071.     
  3072.      Examples:
  3073.     
  3074.      Const States = 50 CPU = '80386 SX' WeekEnd = True
  3075.     
  3076.      or
  3077.     
  3078.      Const
  3079.         States = 50
  3080.         CPU = '80386 SX'
  3081.         WeekEnd = True
  3082.     
  3083.     Using the word STATES is just like using 50. Using CPU is just like
  3084.     using '80386 SX'. But if throughout my menu you use CPU, and then you
  3085.     get a new computer with a 80486, you can just change one line:
  3086.     
  3087.      Const CPU = '80486'
  3088.     
  3089.     And all the places you used CPU changes to '80486'. This is the correct
  3090.     way to program.
  3091.     
  3092.     
  3093.      ABOUT ARRAYS
  3094.     
  3095.     MarxMenu supports multidimensional arrays up to 31 dimensions. Unlike
  3096.     other programming languages, arrays need not be declared. MarxMenu
  3097.     creates arrays "on the fly" and automatically takes care of the array
  3098.     size and number of dimensions.
  3099.     
  3100.     Another unusual feature of MarxMenu arrays is that they are an array of
  3101.     MarxMenu variables. This means that elements of MarxMenu arrays need not
  3102.     be of the same type. Element 1 can be a number, element 2 can be a
  3103.     string and element 3 can be another array.
  3104.     
  3105.     This type of variable management leads to the easy creation of very
  3106.     powerful data structures as you will see.
  3107.     
  3108.      Var X
  3109.     
  3110.      X[1] = 'Element 1'
  3111.      X[2] = 3
  3112.      X[3] = True
  3113.      X[4,6] = 9
  3114.      X[4,7] = 'Ten'
  3115.     
  3116.     These are all valid statements. MarxMenu creates a two dimensional array
  3117.     here. If we now execute the following statement:
  3118.     
  3119.  
  3120.     Computer Tyme * MarxMenu * Users Manual                 Page #44
  3121.     -----------------------------------------------------------------
  3122.     
  3123.      X[4] = X[4,6] + X[2]
  3124.     
  3125.     X[4] becomes equal to 12 but variables X[4,6] and X[4,7] are lost. This
  3126.     is because we have changed an array into a number. MarxMenu
  3127.     automatically handles the deallocation of memory used by this array and
  3128.     its elements and returns the space the used to the memory pool.
  3129.     
  3130.     
  3131.      ABOUT QUALIFIERS
  3132.     
  3133.     Qualifiers are named indexes into arrays. They are used to make the
  3134.     source menu file more readable and more organized.
  3135.     
  3136.     Suppose we are creating a data structure to deal with places in the
  3137.     United States. First we will need an array for States.
  3138.     
  3139.      Var States
  3140.     
  3141.      We want to store some facts about the states.
  3142.     
  3143.      Qualifier
  3144.         Population
  3145.         Bird
  3146.         Motto
  3147.         County
  3148.     
  3149.      State[3].Population = 10000000
  3150.      State[3].Bird = 'Chicken'
  3151.      State[3].Motto = 'Best politicians money can buy!'
  3152.     
  3153.     Now states have counties and counties have county seats, sheriffs, and
  3154.     cities.
  3155.     
  3156.      Qualifer
  3157.         Sheriff
  3158.         Seat
  3159.         City
  3160.     
  3161.      State[3].County[7].Sheriff = 'Buck InBred'
  3162.      State[3].County[7].Seat = 'Possum Trot'
  3163.     
  3164.     Now counties have cities and cities have schools, mayors, churches, and
  3165.     taxes.
  3166.     
  3167.      Qualifier
  3168.         Schools
  3169.         Mayor
  3170.         Churches
  3171.         Taxes
  3172.     
  3173.  
  3174.     Computer Tyme * MarxMenu * Users Manual                 Page #45
  3175.     -----------------------------------------------------------------
  3176.     
  3177.      State[3].County[7].City[9].Schools = 8
  3178.      State[3].County[7].City[9].Mayor = 'Virgil Collins'
  3179.      State[3].County[7].City[9].Churches = 120
  3180.      State[3].County[7].City[9].Taxes = '$100,000,000'
  3181.     
  3182.     The above line is the same as:
  3183.     
  3184.      State[3,4,7,3,9,4] = '$100,000,000'
  3185.     
  3186.     As you can see with qualifiers, it is easy to create multidimensional
  3187.     arrays in a way that is organized and readable.
  3188.     
  3189.     In this example, the qualifier Population became equal to 1. Bird became
  3190.     equal to 2. The variable references, State[3].Bird and State[3,2] are
  3191.     the same. It's just that one is more readable than the other. Qualifiers
  3192.     normally begin by assigning 1 to the first name and 2 to the second
  3193.     etc. This can be modified.
  3194.     
  3195.      Qualifier
  3196.        Color = 7
  3197.        Size
  3198.        Shape
  3199.     
  3200.     In this case Color becomes the number 7; Size becomes the number 8; and
  3201.     Shape becomes the number 9.
  3202.     
  3203.     
  3204.      POINTER VARIABLES
  3205.     
  3206.     In MarxMenu variables can point to other variables allowing parameters
  3207.     to be passed to procedures by reference as well as by value. A pointer
  3208.     variable stores the location of another variable. Any time a pointer
  3209.     variable is accessed, MarxMenu acts upon the variable that the pointer
  3210.     variable is pointing to. Pointer variables are set using the Loc
  3211.     (location) command.
  3212.     
  3213.      Example:
  3214.        Var A B C
  3215.        A = Loc B
  3216.     
  3217.     MarxMenu supports complex location pointers and pointers to other
  3218.     pointers. MarxMenu will resolve all references till real data is found.
  3219.     
  3220.      Example:
  3221.        B = Loc A
  3222.        C = Loc B
  3223.        C[5] = 20
  3224.        Writeln A[5]  ;returns 20
  3225.     
  3226.  
  3227.     Computer Tyme * MarxMenu * Users Manual                 Page #46
  3228.     -----------------------------------------------------------------
  3229.     
  3230.     Pointers can also be passed as parameters to procedures. Thus if A is an
  3231.     array of strings we can sort A as follows:
  3232.     
  3233.      Procedure SortTest (TestArray)
  3234.         SortArray(TestArray)
  3235.      EndProc
  3236.     
  3237.      SortTest (Loc A)  ;sorts array A
  3238.     
  3239.     
  3240.      COMMENTS IN MENU FILES
  3241.     
  3242.     MarxMenu has three ways to add comments to a menu file. The first way is
  3243.     with the Comment command.
  3244.     
  3245.      Comment
  3246.      ========================
  3247.      This is a comment block.
  3248.      ========================
  3249.      EndComment
  3250.     
  3251.     All lines up to EndComment are ignored.
  3252.     
  3253.     The second way is with a ';'. All text to the right of the ';'
  3254.     (semicolon) is ignored.
  3255.     
  3256.      BlankTime = 20  ;this is where we set the blank time.
  3257.     
  3258.     The third way is using {} or curly braces. Anything inside the curly
  3259.     braces is ignored. Curly braces can be nested.
  3260.     
  3261.      {All of {this} is a comment.}
  3262.     
  3263.     Comments are ignored by the compiler and cost you nothing in execution
  3264.     speed. Comments can save you a lot of time if you have to come back
  3265.     later and work on your menu, or if someone else has to work on it.
  3266.     Therefore, we encourage you to use comments as much as possible.
  3267.     
  3268.     
  3269.      THE MARXMENU COMPILER
  3270.     
  3271.     MarxMenu reads your MNU files and creates MRX files. These MRX files are
  3272.     a highly digested form of the MNU file that you created. MRX files are
  3273.     the compiled files.
  3274.     
  3275.     When you run MarxMenu, the interpreter MARXMENU.EXE looks for the menu
  3276.     file with the MRX extension. If it doesn't find it, MARXMENU.EXE will
  3277.     automatically load MARXCOMP.EXE and compile the menu. MARXMENU.EXE also
  3278.     compares the file dates of the MNU and the MRX files. If the MNU file is
  3279.     newer than the MRX file, the compiler will be loaded.
  3280.     
  3281.  
  3282.     Computer Tyme * MarxMenu * Users Manual                 Page #47
  3283.     -----------------------------------------------------------------
  3284.     
  3285.     MarxMenu will also force a compile if the MRX file was not compiled by
  3286.     the same version and release date of the MarxMenu you are using. MRX
  3287.     files are not compatible from one version of MarxMenu to the next.
  3288.     
  3289.     You can also force a compile from the command line by typing MARXCOMP
  3290.     <menu>. If you are on a network and using MarxMenu to log you in, make
  3291.     sure you run the compiler if you change your login menu file.
  3292.     
  3293.     Once your menus are written, you can remove the MNU file and
  3294.     MARXCOMP.EXE from the system. This prevents anyone from modifying your
  3295.     menus. The MRX files are scrambled for security. This prevents probing
  3296.     eyes from reading strings in the MRX files.
  3297.     
  3298.     One important thing to remember. Don't lose your original MNU files. The
  3299.     MRX files can NOT be decompiled. If you lose your original menu files
  3300.     you can't change your menus and the MRX files you have will not be
  3301.     compatible with future releases of MarxMenu.
  3302.     
  3303.     
  3304.      MARXMENU LANGUAGE RULES
  3305.     
  3306.     MarxMenu interpretation is left to right and doesn't have any operator
  3307.     precedence. You can control the order of evaluation by using
  3308.     parentheses.
  3309.     
  3310.      Examples:
  3311.     
  3312.        2 + 3 * 4      ;returns 20
  3313.        2 + (3 * 4)    ;returns 14
  3314.     
  3315.        if A > 4 or B < 6 then ...      ;error
  3316.        if (A > 4) or (B < 6) then ...  ;correct
  3317.     
  3318.     Statements are limited to one line and lines are limited to 200
  3319.     characters.
  3320.     
  3321.     
  3322.      COMPILER COMPATIBILITY
  3323.     
  3324.     The MarxMenu compiler is fully compatible with earlier versions of
  3325.     MarxMenu with a few exceptions. The new compiler does a lot more error
  3326.     checking than earlier versions of MarxMenu and will catch errors that
  3327.     you used to get away with. Other than that, the only difference you
  3328.     should notice will be a speed increase.
  3329.     
  3330.     Earlier versions of MarxMenu had separate names for variable types. The
  3331.     names $VAR, BVAR, #VAR, and FILEVAR act the same as typing VAR.
  3332.     
  3333.     Very early versions of MarxMenu had a different form of the USEARROWS
  3334.     command that required 4 to 5 numbers after it. If you run into this
  3335.     error, just get rid of the numbers after USEARROWS and it will work
  3336.     fine.
  3337.     
  3338.  
  3339.     Computer Tyme * MarxMenu * Users Manual                 Page #48
  3340.     -----------------------------------------------------------------
  3341.     
  3342.      A WORD ABOUT DOS VERSIONS .....
  3343.     
  3344.     Versions of DOS below 3.3 will cause MarxMenu to use 3.5k of RAM where
  3345.     3.3 DOS and above use no memory. 3.2 DOS is very buggy and should be
  3346.     replaced. 3.1 DOS isn't too bad for bugs but if you're using the BACKUP
  3347.     and RESTORE programs that came with it, you're in trouble. They don't
  3348.     work on large files. You'll find that out if you try to restore one of
  3349.     them.
  3350.     
  3351.     MS-DOS 4.01 seems to be pretty clean provided you have the April '89
  3352.     release or later. To determine if you do, check the file date on
  3353.     COMMAND.COM. Earlier versions of DOS 4.01 have SERIOUS BUGS. If you are
  3354.     running any DOS 4 earlier than April '89 you should upgrade immediately.
  3355.     
  3356.     We are happy to announce that MarxMenu runs under DOS 5.0 with no
  3357.     problems and requiring no modifications. One feature implemented is the
  3358.     Idle Loop call which allows MarxMenu to conserve CPU power when it's not
  3359.     doing anything. This makes it work better under DesqView and Windows.
  3360.     
  3361.     Speaking of Windows, MarxMenu is not a Windows program. It can however
  3362.     be used to start Windows programs and is can be run under Windows.
  3363.     Windows however is an extremely unstable environment. If for some reason
  3364.     you're having trouble with MarxMenu and Windows, it's Windows fault. In
  3365.     spite of glowing reviews that magazine writers seem compelled to write,
  3366.     I recommend avoiding Windows unless you have a program that requires
  3367.     Windows to run.
  3368.     
  3369.     DR-DOS or EZ-DOS are pretty good also. It is very compatible as long as
  3370.     you don't get too strange with it. We recommend version 3.4 or later.
  3371.     DR-DOS has a nasty COMSPEC bug in versions 5 and 6 when running a second
  3372.     COMMAND.COM shell started from a network drive.
  3373.     
  3374.     4DOS is also pretty good but sometimes some of the advanced features in
  3375.     this product can cause it to behave differently than DOS. This requires
  3376.     extra care when writing your menus.
  3377.     
  3378.     MarxMenu should work correctly on 386 type multiuser operating systems
  3379.     such as Digital Research's Concurrent DOS 386 or SCO VPIX DOS emulators
  3380.     and PCMOS. Under these systems you will have to set the TASK environment
  3381.     variable if you are running MarxMenu in multiple tasks.
  3382.     
  3383.     MarxMenu will not run correctly under DesqView 2.26. It will run under
  3384.     2.25 or 3.21. So if you are running 2.26, it needs to be upgraded.
  3385.     MarxMenu contains several support functions for DesqView including
  3386.     DesqView API calls to control the DesqView environment.
  3387.     
  3388.     Although we haven't tested MarxMenu in the OS/2 1.3 compatibility box, we
  3389.     have had good success with MarxMenu under OS/2 2.0. We have been able not
  3390.     only to run DOS programs but OS/2 programs as well. If set up right
  3391.     MarxMenu can spawn multiple tasks of both DOS and OS/2 applications.
  3392.     
  3393.  
  3394.     Computer Tyme * MarxMenu * Users Manual                 Page #49
  3395.     -----------------------------------------------------------------
  3396.     
  3397.     If you are running under some weird DOS and are having problems, try it
  3398.     under "regular" DOS and see if it goes away. If it does, try to find out
  3399.     what it is about your weird DOS that makes it not work right. We are
  3400.     interested in being compatible with as many systems as possible. Let us
  3401.     know if you are having problems. But also, try to get your weird DOS
  3402.     vendors to clean up their act.
  3403.     
  3404.     
  3405.      A WORD ABOUT BUGS .....
  3406.     
  3407.     Although we try to create perfect bug free software, every now and then
  3408.     we make a mistak. If you find one, let us know and we'll fix it. Our
  3409.     standard is to not only have all the functions of MarxMenu work
  3410.     correctly, but to be as intuitive and full featured as possible.
  3411.     
  3412.     
  3413.      TIPS FROM THE MASTER
  3414.     
  3415.     Since MarxMenu is a programming language, we want to talk about what
  3416.     programming is and how it is accomplished. we want to dispel some myths
  3417.     and fears relating to it and introduce you to techniques that will help
  3418.     you write code neatly, quickly, and efficiently. From the outside,
  3419.     programming looks like magic; but once you know a few of the tricks, its
  3420.     really not too hard.
  3421.     
  3422.     Many of us who were raised on 50s and 60s science fiction television
  3423.     learned that it is the brainy types who deal with computers. It almost
  3424.     gives you the impression that the computer is smart and you are dumb. As
  3425.     you use the computer, it is evaluating you, and if it figures out that
  3426.     its smarter than you, it can get your job and replace you.
  3427.     
  3428.     
  3429.      COMPUTERS DO SIMPLE TASKS
  3430.     
  3431.     A computer is a simple device. It does simple tasks. It just does them
  3432.     very fast and accurately. Computers don't even know basic things like
  3433.     how to write letters on the screen or how to read the keyboard. These
  3434.     are programs that the computer runs. Someone had to program your
  3435.     computer to do even the simplest of tasks.
  3436.     
  3437.     As you learn to use MarxMenu start with the simple menus. The SAMPLE.MNU
  3438.     is a very easy program. Study it and understand how it works. Make a
  3439.     copy of it and change one selection to run one of your programs.
  3440.     
  3441.     Once you have changed one selection, change several more. Now MarxMenu
  3442.     is running your programs, and you have made it work. Then try something
  3443.     new. Add more selections. Change the size and position of the box to fit
  3444.     your needs.
  3445.     
  3446.     Take the time to play with it. Try new commands. Build up your menu. Be
  3447.     artistic. The more you work with it, the more you will learn.
  3448.     
  3449.  
  3450.     Computer Tyme * MarxMenu * Users Manual                 Page #50
  3451.     -----------------------------------------------------------------
  3452.     
  3453.      COMPLEX TASKS ARE MADE OF SIMPLE TASKS
  3454.     
  3455.     As you learn more about MarxMenu, move on to QUICK.MNU. Here we use more
  3456.     of the power of the MarxMenu language. As you study this menu, you will
  3457.     notice something. Even though it looks complex, it is really a
  3458.     collection of simple tasks. Understand how the moving windows work.
  3459.     Understand that the pop-up menus are just like the main menu. You will
  3460.     see that it is really not a complex menu at all. It is a lot of simple
  3461.     processes hooked together.
  3462.     
  3463.     That is one of the main concepts behind programming. Complex tasks are
  3464.     built out of simple tasks. As you learn the simple tasks, you will
  3465.     quickly understand how to connect them to accomplish complex tasks.
  3466.     
  3467.     When one sees a castle, one can't help but to be impressed. But castles
  3468.     are made of stones. And you can't build castles until you understand how
  3469.     stones work. Then you realize that a castle is just a bunch of stones
  3470.     hooked together. Programming is just like that.
  3471.     
  3472.     To successfully understand MarxMenu, start at the bottom and work your
  3473.     way up. Each little trick you learn becomes another building block for
  3474.     the next trick. What you start with becomes the foundation for the work
  3475.     that you will eventually produce.
  3476.     
  3477.     
  3478.      LEARNING GOOD PROGRAMMING HABITS
  3479.     
  3480.     Programming has its pitfalls, here we hope to give you some tips that
  3481.     will help you avoid common mistakes. This, we hope will give you a head
  3482.     start on the road to MarxMenu being done right.
  3483.     
  3484.     The first concept is patience. Rome wasn't built in a day. You may not
  3485.     be able to write grand and glorious menus the first try. In fact, you
  3486.     may have trouble getting the damn thing to work at all. As you have
  3487.     probably already noticed, no program is perfect. Sometimes there are
  3488.     errors in the manual. Sometimes it just doesn't work like you expected,
  3489.     or does not work the same way as other programs that are familiar to
  3490.     you.
  3491.     
  3492.     But, once you complete the installation, give it some time and realize
  3493.     that there is a lot of potential here. Approach all challenges with a
  3494.     good attitude.
  3495.     
  3496.     
  3497.      USE LONG NAMES
  3498.     
  3499.     The author learned computers the hard way. Out on the streets. Hanging
  3500.     around with other computer nerds in the late 70s who never went to
  3501.     college either. Marc was known as a Bit Wit. His first real computer
  3502.     was an IMSAI kit. Actually, it wasn't all IMSAI, it was a combination
  3503.     of several kits where no two boards came from the same supplier. It was
  3504.     in an IMSAI box, so he called it an IMSAI.
  3505.     
  3506.  
  3507.     Computer Tyme * MarxMenu * Users Manual                 Page #51
  3508.     -----------------------------------------------------------------
  3509.     
  3510.     It was all supposed to work together the salesman told him the day
  3511.     before they went out of business. And it all did after some redesigning.
  3512.     Marc was tired of fixing CB radios for a living and decided that
  3513.     computers were here to stay and that he was going to learn about them.
  3514.     
  3515.     With that in mind, everything that went wrong became an opportunity for
  3516.     growth. Not that he looked forward to things not working. He programmed
  3517.     the thing from scratch, loading binary codes into memory from an array
  3518.     of switches on the front panel.
  3519.     
  3520.     The first program he developed ran the EPROM burner, which was the only
  3521.     storage device he had. After he saved this program on a chip, he used it
  3522.     to load the second program onto the chip.
  3523.     
  3524.     Eventually Marc wrote enough software to talk to the screen and
  3525.     keyboard. Now he could type hex codes on the screen and save them to a
  3526.     chip. Eventually he wrote a tape driver and could save stuff on tape.
  3527.     Later, Marc traded for a North Star disk drive and had a disk system.
  3528.     One 90k floppy. Marc thought he was in heaven.
  3529.     
  3530.     Marc was intimately familiar with his computer. All his programs were in
  3531.     object code with no documentation whatsoever. At that point, a friend of
  3532.     his, Rufus, turned me on to a language called FORTH.
  3533.     
  3534.     Being an interesting language and very powerful, he typed in the whole
  3535.     compiler in hex and adapted it to work on his system. Once he got Forth
  3536.     up, he wrote a line editor in it. Then he used the line editor to write
  3537.     a screen editor. With the screen editor, he rewrote Forth in Forth. The
  3538.     language compiled itself.
  3539.     
  3540.     From working with Forth (which is as much a religion as a programming
  3541.     language) he learned both good and bad habits. Forth is a write only
  3542.     language and is almost impossible to read even with the best of
  3543.     documentation. On the other hand, it is as close to the machine as you
  3544.     can get in a high level language.
  3545.     
  3546.     After opening up a computer store in 1984, it became time to make the
  3547.     jump from CP/M to the DOS world. Turbo Pascal offered an interesting
  3548.     solution. They had both a CP/M and DOS compiler. This meant that
  3549.     programs he wrote would run on both machines. The thing that struck him
  3550.     about Pascal was that he could read it better than Forth, and didn't
  3551.     even know the language. Not only that, but he could follow the programs
  3552.     that other people wrote and incorporate their code into his code.
  3553.     
  3554.     The more programs he wrote, the more he came to appreciate a language
  3555.     that was reader friendly. He could manage his programs much easier
  3556.     without having to remember so much. Other people could follow what he
  3557.     was doing easier.
  3558.     
  3559.  
  3560.     Computer Tyme * MarxMenu * Users Manual                 Page #52
  3561.     -----------------------------------------------------------------
  3562.     
  3563.     The important thing he learned was that readability is very important in
  3564.     a program. The more complex the program, the more important readability
  3565.     becomes.
  3566.     
  3567.     One of the main design factors in the MarxMenu language is readability.
  3568.     Marc could have used short names for the commands and it's not like he
  3569.     likes to type. He's still on just two fingers here. Its just that
  3570.     descriptive names are so much more meaningful when putting simple
  3571.     processes together to create complex processes.
  3572.     
  3573.     The point (finally) is, when creating variable names, or procedure
  3574.     names, use long meaningful names. It may take more typing, but it takes
  3575.     a lot less thinking and remembering later on. Consider the following
  3576.     example in choosing variable names.
  3577.     
  3578.      Var KlingonsDestroyedInBattle
  3579.      Var K
  3580.     
  3581.     In the above example, it is obvious which one tells you more about what
  3582.     information is stored in the variable.
  3583.     
  3584.     
  3585.      USE COMMENTS LIBERALLY
  3586.     
  3587.     Even though MarxMenu is easy to read, it still should be commented. The
  3588.     examples that come with this disk do not have as many comments as they
  3589.     should. Don't do as we do, do as we say. Marc says, "I'm lazy and a bad
  3590.     example."
  3591.     
  3592.     Comments are not compiled in your MRX files and cost you nothing at
  3593.     execution time. In order to make commenting easy, we have provided three
  3594.     separate comment commands. Learn these commands first.
  3595.     
  3596.     Every menu should include a title comment. This should include the name
  3597.     and phone number of the person who wrote it. If you have a problem with
  3598.     a menu and you send it to us, we expect a title comment. That way we can
  3599.     call you about it.
  3600.     
  3601.      Comment
  3602.      ====================================================================
  3603.     
  3604.      This comment was created by Marc Perkel 1-417-866-1222
  3605.     
  3606.      Last Updated: 01-28-90
  3607.     
  3608.      This form of comment block is better than using ';' because not using ;
  3609.      allows you to turn your word wrap feature on and do some professional
  3610.      looking editing in the comment block. This kind of comment block should
  3611.      be at the beginning of each and every menu you create.
  3612.     
  3613.  
  3614.     Computer Tyme * MarxMenu * Users Manual                 Page #53
  3615.     -----------------------------------------------------------------
  3616.     
  3617.      The top and bottom bars are for looks only and are not necessary to the
  3618.      comment. I strongly encourage you to use bars and do things for looks
  3619.      in source code. Looks are very important and you should put as much
  3620.      care into your comments as you do in writing a business letter.
  3621.     
  3622.      If you learn MarxMenu well, your source code may be part of your next
  3623.      job interview as you move up the corporate ladder. So you want it to
  3624.      look good.
  3625.     
  3626.      By the way, if you upload your menus to my bulletin board, I expect a
  3627.      comment block at the top of your menu with your phone number so I can
  3628.      get back to you.
  3629.     
  3630.      ====================================================================
  3631.      EndComment
  3632.     
  3633.     
  3634.      INDENT YOUR CODE
  3635.     
  3636.     As programs get more complex, it gets harder to match the IFs with the
  3637.     ELSEs and the ENDIFs. This is where indenting comes in. It creates a
  3638.     logical grouping of statements and you can easily see what goes with
  3639.     what.
  3640.     
  3641.      Procedure IfDemo
  3642.         IF <condition>
  3643.            <statement>
  3644.            <statement>
  3645.         ELSEIF <condition>
  3646.            <statement>
  3647.         ELSEIF <condition>
  3648.            <statement>
  3649.            <statement>
  3650.         ELSE
  3651.            <statement>
  3652.            <statement>
  3653.            WHILE <condition>
  3654.               <statement>
  3655.               <statement>
  3656.            ENDWHILE
  3657.            <statement>
  3658.         ENDIF
  3659.         <statement>
  3660.      EndProc
  3661.     
  3662.     You can easily see how this helps you follow what you are writing. Now
  3663.     here's a new trick. If you are using an IF, and plan to use an ELSE and
  3664.     an ENDIF, on the line under the IF statement, type in your ELSE and
  3665.     ENDIF lines. Then go back and insert your statements in between these
  3666.     lines. This will help you avoid forgetting the ENDIF or getting mixed up
  3667.     as to which IF matches which ELSE.
  3668.     
  3669.  
  3670.     Computer Tyme * MarxMenu * Users Manual                 Page #54
  3671.     -----------------------------------------------------------------
  3672.     
  3673.     A similar trick can be done with parens and brackets. When typing a left
  3674.     paren, type the matching right paren with it. Then fill in the code you
  3675.     want to put inside the parens or brackets.
  3676.     
  3677.     
  3678.      FOR DUPLICATE TASKS, USE PROCEDURES
  3679.     
  3680.     As menus become longer and more complex, many times you are duplicating
  3681.     a process that you already have written. Although it is easy to copy a
  3682.     block of code, it is better to create a procedure.
  3683.     
  3684.     With procedures, the process is put in one place and is given a name.
  3685.     Preferably a long meaningful name. Once this procedure is defined and
  3686.     named, it can be used as if it were part of the MarxMenu language. This
  3687.     makes menus smaller and easier to read. It is also a way for you to
  3688.     combine small processes into large processes. Procedures can be built
  3689.     using other procedures.
  3690.     
  3691.     Once you have a process figured out and working in a procedure, the
  3692.     whole process becomes a black box with a name that you can use
  3693.     elsewhere. The whole process is reduced down to a name that just works!
  3694.     
  3695.     Another advantage of procedures is that if circumstances change and the
  3696.     procedure needs to be modified, you only make a change one place in your
  3697.     menus, and everything that uses that procedure is automatically changed.
  3698.     This makes menu maintenance easier.
  3699.     
  3700.     
  3701.      DON'T PROGRAM YOURSELF INTO A CORNER
  3702.     
  3703.     Using the above techniques will allow you to write very complex menu
  3704.     systems. Failing to use these techniques can limit what you can
  3705.     accomplish. There is a term called "programming yourself into a corner"
  3706.     which refers to a program that is so poorly written, that it can't be
  3707.     modified to accommodate changes and improvements.
  3708.     
  3709.     The height of your programming abilities depends on the foundation on
  3710.     which they are built. You must avoid rushing to the top without first
  3711.     creating a firm foundation on which to build. Good technique is the
  3712.     foundation for good programming. You will have to learn it eventually,
  3713.     it is more efficient to do it right than it is to do it over.
  3714.     
  3715.     Adopting good programming habits reminds me of my favorite light bulb
  3716.     joke:
  3717.     
  3718.     Q. How many psychologists does it take to change a light bulb?
  3719.     
  3720.     A. Only one, but the light bulb has to want to change.
  3721.     
  3722.  
  3723.     Computer Tyme * MarxMenu * Users Manual                 Page #55
  3724.     -----------------------------------------------------------------
  3725.     
  3726.      FOR THE POWER USER:
  3727.     
  3728.     I originally wrote MarxMenu on a dare. I said that in one afternoon I
  3729.     could write a better menu system than one of the most popular menu
  3730.     systems. I met the challenge and then found that there is a lot of
  3731.     demand for power in a menu system. Friends started asking for this and
  3732.     that feature and this program has gone far beyond what I ever intended.
  3733.     
  3734.     The demand for more features has outraced my ability to keep up with the
  3735.     documentation standards that I expect from other software packages that
  3736.     I buy. Please bear with me. If you find any errors in the manual, or
  3737.     bugs in the program, please let me know and I'll try to correct any
  3738.     problems.
  3739.     
  3740.     I also appreciate your suggestions for improvements. Many of the
  3741.     features included are a result of requests you have made. Many of you
  3742.     are using this program in ways I never dreamed.
  3743.     
  3744.     The main design philosophy behind this product is POWER and Flexibility.
  3745.     I am also committed to keeping the source code as readable as possible.
  3746.     I am loyal to the concept of using NO RAM. None of MarxMenu stays
  3747.     resident. Because of this I can claim that if you are having some kind
  3748.     of problem, it's not the fault of MarxMenu being resident, because
  3749.     MarxMenu is not resident. Also, using NO RAM allows loading of TSR's
  3750.     (memory resident programs) from the menu.
  3751.     
  3752.     For computer consultants, MarxMenu is an excellent way to make money.
  3753.     You can provide your clients with professional looking menu systems
  3754.     customized (by you) to fit their needs. You can provide complex menu
  3755.     structures not possible with any other menu system. And, because
  3756.     MarxMenu uses NO RAM, you don't have to worry about conflicts between
  3757.     MarxMenu and any other software product.
  3758.     
  3759.     Although MarxMenu is copyrighted, the program is not copy protected.
  3760.     There is nothing to prevent you from making hot copies and giving them
  3761.     away to all your clients. I would like to point out that when you give
  3762.     away something you should be selling you lose respect from your clients
  3763.     and attract those who expect you to work for free. You will make more
  3764.     money if you play by the rules. My best and most profitable clients use
  3765.     no hot software whatsoever. Think about it.
  3766.     
  3767.     
  3768.      WHERE MARXMENU IS HEADING
  3769.     
  3770.     MarxMenu will continue to grow and develop. Because MarxMenu is an
  3771.     overlaid program I have the ability to add as many features as I want
  3772.     without slowing down load or processing speed. In fact MarxMenu is 10
  3773.     times as fast today as it was in 1989 and its vocabulary of commands has
  3774.     grown 10 times as well.
  3775.     
  3776.  
  3777.     Computer Tyme * MarxMenu * Users Manual                 Page #56
  3778.     -----------------------------------------------------------------
  3779.     
  3780.     I'm often asked the question, what other operating systems will I
  3781.     support? Will there be a Windows version? An OS/2 version? Unix?
  3782.     
  3783.     Let me say first that my primary commitment is to the OS that most
  3784.     people actually use, and that is DOS. I am not moved by the industry
  3785.     politics. I focus on the systems that make computers and networks
  3786.     actually work.
  3787.     
  3788.     So for those of you who are asking the question "Will there be a Windows
  3789.     version of MarxMenu?" The answer is no. The reason is, in my view,
  3790.     windows is too unstable a platform in which to develop code for. As I
  3791.     see it, Windows is a programmer angry environment and is fatally flawed
  3792.     by design. I consider this path a mistake and a mistake that I am not
  3793.     going to make.
  3794.     
  3795.     Will there be an OS/2 version? Likely. This OS seems to be going in the
  3796.     right direction. I have been able to control both DOS and OS/2 tasks
  3797.     from the VDM. Although the two major OS players are equally arrogant on
  3798.     what OS they are going to force down our throats, at least the one from
  3799.     IBM actually works.
  3800.     
  3801.     
  3802.      A WORD TO WRITERS AND REVIEWERS
  3803.     
  3804.     MarxMenu is a multi-level product fulfilling the needs of a large
  3805.     variety of computer users. It is difficult to compare this product on a
  3806.     feature to feature basis. This is because MarxMenu has about 10 times as
  3807.     many features as any other menu system. These features allow this
  3808.     product to target a very broad variety of computer users, from the
  3809.     novice user, who will only use the LEVEL1 or QUICK menus, to large
  3810.     companies with hundreds of file servers controlled through the MarxMenu
  3811.     language.
  3812.     
  3813.     One common mistake that writers make when evaluating MarxMenu, is in the
  3814.     area of ease of use. If you are looking for ease of use, stick with the
  3815.     simple menus and the self-configuring menus such as the LEVEL1, QUICK
  3816.     and QUICKNOV examples. By looking at it this way, MarxMenu will be as
  3817.     easy to use as any other menus system out there and can be compared for
  3818.     similar features. Even though MarxMenu supports complex commands, it is
  3819.     not necessary to use them in simple menus.
  3820.     
  3821.     If you are doing a comparative review, please let us know on what basis
  3822.     you are making comparisons. This way we can assist you by providing you
  3823.     accurate information in the area of your interest. If you are looking
  3824.     for simple, we can show you simple; if you are looking for power, we can
  3825.     show you power.
  3826.     
  3827.     On the other hand, if you are reviewing power tools and network
  3828.     utilities, you might want to look at the Network Survival Kit and not
  3829.     just MarxMenu. So if you have a copy of only this program, give us a
  3830.     call and We'll get you the latest and greatest.
  3831.     
  3832.  
  3833.     Computer Tyme * MarxMenu * Users Manual                 Page #57
  3834.     -----------------------------------------------------------------
  3835.     
  3836.     In addition to our software, we also have color prints and color slides
  3837.     available as well as product literature and sample reviews. These are
  3838.     available to make your job easier and help you make those deadlines.
  3839.     
  3840.     MarxMenu tends to be best reviewed as a long article rather than a short
  3841.     one. It is very good if you have a lot of space to fill. With a long
  3842.     article, you can get really in depth with what MarxMenu is able to do.
  3843.     
  3844.     Any publication which reviews any of my products gets a site license to
  3845.     that product whether we like the review or not. Our position is that if
  3846.     you are using MarxMenu yourself, you will get to know it better.
  3847.     
  3848.     Any questions you have about any of my products, feel free to call. The
  3849.     main thing we ask is that you get the product name, price, our address,
  3850.     and our phone number right.
  3851.     
  3852.     
  3853.      SECURITY ISSUES
  3854.     
  3855.     Different users have different security needs that range from none to
  3856.     extreme. If you are in the none category, then you can skip this
  3857.     chapter. But if you need all the security you can get, then read on.
  3858.     
  3859.     First of all, DOS is not a secure operating system. There are various
  3860.     third party programs out there but what I'm going to cover here is how
  3861.     to make DOS secure as possible working with what you get with DOS.
  3862.     
  3863.     The first thing to do is add the command BREAK=OFF to your CONFIG.SYS
  3864.     file. This prevents programs from breaking out of batch files. Avoid
  3865.     using commands that are internal DOS commands like DIR from inside a
  3866.     menu or inside batch files. Use the D.EXE program instead.
  3867.     
  3868.     Use the LockWord option in the screen blanker so that if a menu is left
  3869.     unattended, it will not be accessible to just anyone walking up to a
  3870.     machine. The LockWord command requires the user type a password to
  3871.     release the screen blanker. If you are on a Novell network, you can use
  3872.     the UseNovPassword command. This forces the user to type their Novell
  3873.     password to unblank the screen.
  3874.     
  3875.     If a menu choice accesses sensitive materials, then put a password on
  3876.     it. Also, make sure the SUPERVISOR user has a password. There are many
  3877.     times I've walked up to a server and logged in as supervisor and got
  3878.     right in. Make sure that intruder detection is set on. If you don't know
  3879.     what intruder detection is, read the Novell manuals.
  3880.     
  3881.     You can also use the LogoffTime command to log users off the network
  3882.     after a given amount of inactivity. This also helps kick people off so
  3883.     that you can upgrade MarxMenu from time to time. (MARXMENU.OVR can't be
  3884.     updated on a network unless all users are out of the menu.)
  3885.     
  3886.  
  3887.     Computer Tyme * MarxMenu * Users Manual                 Page #58
  3888.     -----------------------------------------------------------------
  3889.     
  3890.     If you have applications that allow you to shell to DOS, you can prevent
  3891.     them from getting to DOS by changing your COMSPEC to point to something
  3892.     other than COMMAND.COM. You could also rename COMMAND.COM in case a
  3893.     program is looking for this file by name. If this doesn't work for you
  3894.     then you can use the COMSP.EXE program to do the same thing.
  3895.     
  3896.     Another defense is to lock the door to the computer room at night and
  3897.     teach employees security policies and make sure they use them. Security
  3898.     policies include such rules as not having your password written on a
  3899.     stick-em note stuck on the side of your monitor.
  3900.     
  3901.     If you are on a network, buy diskless workstations. People can't copy
  3902.     files on or off a network that doesn't have a disk drive. It helps keep
  3903.     viruses off your server and lets the network administrators control what
  3904.     is and isn't on the network.
  3905.     
  3906.     
  3907.      KEEPING USERS IN THE MENU
  3908.     
  3909.     Some people need to keep users in the menu and prevent them from
  3910.     escaping to a command line no matter what. There are several things you
  3911.     need to do to accomplish this. The first thing is to use BREAK.SYS to
  3912.     prevent breaking out of batch files. Then you use a shell statement to
  3913.     load COMMAND.COM temporary instead of permanent. Then you use COMSP.EXE
  3914.     to prevent programs from shelling out to DOS.
  3915.     
  3916.     
  3917.      USING BREAK.SYS
  3918.     
  3919.     MarxMenu comes with a device driver called BREAK.SYS. This program
  3920.     enhances the BREAK ON and BREAK off functions of DOS to prevent users
  3921.     from using CTRL-C to get out of batch files.
  3922.     
  3923.     Unlike all the other similar programs this one is smart. It only kills
  3924.     CTRL-C if your in COMMAND.COM but allows your applications to see
  3925.     CTRL-C. And, it only uses about 400 bytes of RAM.
  3926.     
  3927.     All you have to do is add a line to your CONFIG.SYS file:
  3928.     
  3929.     DEVICE=BREAK.SYS
  3930.     
  3931.     If your using BREAK.SYS with QEMM or other memory manager, load the
  3932.     memory manager first.
  3933.     
  3934.     BREAK.SYS can be enabled or disabled by using the BREAK ON and BREAK OFF
  3935.     commands either from the command line or from batch files.
  3936.     
  3937.     Although BREAK.SYS is better than DOS, it isn't perfect. There are still
  3938.     situations where you can break out of batch files. If it is important to
  3939.     not break out then you can use it as follows:
  3940.     
  3941.  
  3942.     Computer Tyme * MarxMenu * Users Manual                 Page #59
  3943.     -----------------------------------------------------------------
  3944.     
  3945.     DEVICE=BREAK.SYS /C
  3946.     
  3947.     Using it this way the CTRL-C key is disabled completely. Your
  3948.     application software will not get any CTRL-C.
  3949.     
  3950.     BREAK.SYS has another switch /T that works like /C except that once you
  3951.     execute BREAK ON then it returns to smart CTRL-C handling. The idea here
  3952.     is that more often you need bullet proof protection while the system is
  3953.     booting up, but after going to the main menu you can switch to smart
  3954.     protection. At the end of your bootup batch files add the lines:
  3955.     
  3956.     BREAK ON
  3957.     BREAK OFF
  3958.     
  3959.     This will switch BREAK.SYS into smart mode checking.
  3960.     
  3961.     BREAK.SYS has another feature that makes BREAK ON work better. If you
  3962.     use it like this:
  3963.     
  3964.     DEVICE=BREAK.SYS /B
  3965.     
  3966.     Then when you run BREAK ON and the users presses CTRL-\ it will break
  3967.     you out of programs you might otherwise be stuck in. This feature is
  3968.     great for software developers to use when testing code.
  3969.     
  3970.     
  3971.      USING THE SHELL= COMMAND
  3972.     
  3973.     If you really want to make it impossible to break out to DOS then change
  3974.     you SHELL= statement in your CONFIG.SYS file to read:
  3975.     
  3976.     SHELL=COMMAND.COM /E:400 /C AUTOEXEC.BAT
  3977.     
  3978.     With this command, if they get out of the batch file it locks the system
  3979.     up. In some cases this is better than letting the user get access to the
  3980.     command line.
  3981.     
  3982.     To use this feature you need to stay in a steady stream of batch file
  3983.     all the way to the menu. If you ever exit or break out of the batch
  3984.     files the system locks up. Without the /P switch, COMMAND.COM is never
  3985.     loaded permanent. So if AUTOEXEC and the batch file that they jump to
  3986.     ever finish the computer locks up. You can't break out to COMMAND.COM
  3987.     because there is no COMMAND.COM to break out to.
  3988.     
  3989.     If you try to use this with Novell's LOGIN.EXE then you won't be able to
  3990.     use the 'EXIT <string>' command in your login script. This is because
  3991.     EXIT will exit to DOS and lock up. You will need to create a LOG.BAT
  3992.     file as follows:
  3993.     
  3994.  
  3995.     Computer Tyme * MarxMenu * Users Manual                 Page #60
  3996.     -----------------------------------------------------------------
  3997.     
  3998.      LOG.BAT
  3999.      =======
  4000.      :Start
  4001.      LOGIN
  4002.      REM ** Stay in loop till LOGIN succeeds **
  4003.      if ErrorLevel 1 goto Start
  4004.      ...
  4005.      <other startup commands>
  4006.      ...
  4007.      Marx MainMenu
  4008.     
  4009.     To get to a command line using this system you will need to run
  4010.     COMMAND.COM or DOLIST.EXE from the menu. In the case of COMMAND.COM you
  4011.     will run:
  4012.     
  4013.      COMMAND.COM /E:400
  4014.     
  4015.     This ensures that this second COMMAND.COM has enough environment space
  4016.     to allow for SET commands.
  4017.     
  4018.     
  4019.      CONDITIONAL STATEMENTS
  4020.     
  4021.     MarxMenu has a full complement of conditional statements. They are as
  4022.     follows:
  4023.     
  4024.      IF->ELSE->ENDIF           Where, IF [condition]
  4025.                                          statement
  4026.                                          statement
  4027.                                       ELSE
  4028.                                          statement
  4029.                                          statement
  4030.                                       ENDIF
  4031.     
  4032.      IF->THEN                  Where, IF [condition] THEN statement
  4033.     
  4034.      IF->ELSE->ELSEIF->ENDIF   Where, IF [condition]
  4035.                                          statement
  4036.                                          statement
  4037.                                       ELSEIF [condition]
  4038.                                          statement
  4039.                                          statement
  4040.                                       ELSEIF [condition]
  4041.                                          statement
  4042.                                          statement
  4043.                                       ELSE
  4044.                                          statement
  4045.                                          statement
  4046.                                       ENDIF
  4047.     
  4048.  
  4049.     Computer Tyme * MarxMenu * Users Manual                 Page #61
  4050.     -----------------------------------------------------------------
  4051.     
  4052.         REPEAT->UNTIL          Where, REPEAT
  4053.                                          statement
  4054.                                          statement
  4055.                                       UNTIL [condition]
  4056.     
  4057.         WHILE->ENDWHILE        Where, WHILE [condition]
  4058.                                          statement
  4059.                                          statement
  4060.                                       ENDWHILE
  4061.     
  4062.         PROCEDURE->ENDPROC     PROCEDURE (name)
  4063.                                          statement
  4064.                                          statement
  4065.                                ENDPROC
  4066.     
  4067.         LOOP->ENDLOOP          LOOP (number)
  4068.                                          statement
  4069.                                          statement
  4070.                                ENDLOOP
  4071.     
  4072.     
  4073.      ENVIRONMENT VARIABLES USED BY MARXMENU
  4074.     
  4075.     MarxMenu uses a variety of environment variables to control various
  4076.     MarxMenu functions. Many of these variables are optional.
  4077.     
  4078.      Set MouseX=(Number)
  4079.     
  4080.     Sets the horizontal sensitivity of the mouse. Default is 15.
  4081.     
  4082.      Set MouseY=(Number)
  4083.     
  4084.     Sets the vertical sensitivity of the mouse. Default is 25.
  4085.     
  4086.      Set MxEcho=(On/Off)
  4087.     
  4088.     If you set the first line of MARX.BAT to @ECHO %MXECHO% then by setting
  4089.     the environment variable MxEcho to ON or OFF, you can control the echo
  4090.     in the MARX.BAT file without having to edit it. This allows you to do
  4091.     diagnostics on a network without messing up other users.
  4092.     
  4093.      Set Temp=(Directory)
  4094.     
  4095.     Normally, MarxMenu creates temporary batch files in the same directory
  4096.     as MARXMENU.EXE. If you set TEMP to a directory, MarxMenu will use this
  4097.     directory instead. This complies with Windows / DOS 5.0 standards.
  4098.     
  4099.      Set MxCmd=(Command)
  4100.     
  4101.  
  4102.     Computer Tyme * MarxMenu * Users Manual                 Page #62
  4103.     -----------------------------------------------------------------
  4104.     
  4105.     MarxMenu uses MXCMD to control what the MARX.BAT file executes. You must
  4106.     have enough environment space available for MarxMenu to use.
  4107.     
  4108.      Set KSV=
  4109.     
  4110.     MarxMenu stores a series of keystrokes in the KSV variable when
  4111.     SavePosition is On.
  4112.     
  4113.      Set STATION=(Number)
  4114.     
  4115.     If you are on a network that is not Novell, then you should set this
  4116.     variable to a unique number for each station between 0 and 255.
  4117.     
  4118.      Set TASK=(Number)
  4119.     
  4120.     If you are running a multi-tasking operating system other than DesqView,
  4121.     and MarxMenu is running more than one task, then set an environment
  4122.     variable TASK to a unique number for each task.
  4123.     
  4124.     MarxMenu also accesses your COMSPEC variable and your PATH variable when
  4125.     executing programs.
  4126.     
  4127.     
  4128.      MARXMENU COMMANDS
  4129.     
  4130.     MarxMenu contains a rich set of commands. They are listed here
  4131.     alphabetically and by command category. You don't have to learn them all
  4132.     so don't let the size of the list scare you.
  4133.     
  4134.     In the following command list, words contained within ( ) are command
  4135.     parameters that must be included after the menu command. If the
  4136.     parameter is not required, it will be contained in [ ]. The numeric
  4137.     range for the <column> parameter is 1 - 80 decimal, and for the <row>
  4138.     parameter the range is 1 - 25, 43, or 50 decimal depending on how many
  4139.     lines your monitor displays.
  4140.     
  4141.     
  4142.      | (Vertical Bar)
  4143.     
  4144.     Forces MarxMenu interpretation under an OnKey Command. If not for the |
  4145.     (Vertical Bar), the command under an OnKey would be written to a batch
  4146.     file. The | is only used under OnKey commands.
  4147.     
  4148.      Example:
  4149.        OnKey 'S'
  4150.          |password 'hello' 3 4
  4151.          ECHO Type EXIT to return to menu
  4152.          COMMAND.COM
  4153.     
  4154.        OnKey 'X'
  4155.          |if UpperCase(ReadEnv('USERNAME')) = 'SUPERVISOR'
  4156.            SYSCON
  4157.          |else
  4158.          |  SecurityBreach('You do not have access to this function!')
  4159.          |endIf
  4160.     
  4161.  
  4162.     Computer Tyme * MarxMenu * Users Manual                 Page #63
  4163.     -----------------------------------------------------------------
  4164.     
  4165.     Category: Misc
  4166.     
  4167.     
  4168.      ( : Operator
  4169.     
  4170.     Starts logical interpreter grouping.
  4171.     
  4172.     Used to force evaluation of an expression other than the normal left to
  4173.     right order.
  4174.     
  4175.      Example:
  4176.        2 * 3 + 2     evaluates to  8
  4177.        2 * ( 3 + 2 ) evaluates to  10
  4178.     
  4179.     See Also: )
  4180.     
  4181.     Category: Misc
  4182.     
  4183.     
  4184.      ) : Operator
  4185.     
  4186.     Ends logical interpreter grouping.
  4187.     
  4188.     See Also: (
  4189.     
  4190.     Category: Misc
  4191.     
  4192.     
  4193.      * : Operator
  4194.     
  4195.     Multiplies two numbers.
  4196.     
  4197.      Example:
  4198.        4 * 6 = 24
  4199.     
  4200.     Category: Math Float
  4201.     
  4202.     
  4203.      + : Operator
  4204.     
  4205.     Adds two numbers or two strings.
  4206.     
  4207.      Example:
  4208.        "Hello" + " " + "World" = "Hello World"
  4209.        2 + 2 = 4
  4210.     
  4211.     Category: Math String Float
  4212.     
  4213.  
  4214.     Computer Tyme * MarxMenu * Users Manual                 Page #64
  4215.     -----------------------------------------------------------------
  4216.     
  4217.      - : Operator
  4218.     
  4219.     Subtracts two numbers.
  4220.     
  4221.      Example:
  4222.        7 - 4 = 3
  4223.     
  4224.     Category: Math Float
  4225.     
  4226.     
  4227.      / : Operator
  4228.     
  4229.     Divides two numbers.
  4230.     
  4231.      Example:
  4232.        6 / 3 = 2
  4233.     
  4234.     Category: Math Float
  4235.     
  4236.     
  4237.      < : Operator
  4238.     
  4239.     Less Than - Compares two numbers or strings.
  4240.     
  4241.      Example:
  4242.        3 < 4 = True
  4243.        'AB' < 'CD' = True
  4244.     
  4245.     Category: Math String Float
  4246.     
  4247.     
  4248.      <= : Operator
  4249.     
  4250.     Less Than or Equal - Compares two numbers or strings.
  4251.     
  4252.      Example:
  4253.        3 <= 4 = True
  4254.        'AB' <= 'CD' = True
  4255.     
  4256.     Category: Math String Float
  4257.     
  4258.     
  4259.      <> : Operator
  4260.     
  4261.     Not Equal - Compares two numbers or strings.
  4262.     
  4263.      Example:
  4264.        3 <> 4 = True
  4265.        'AB' <> 'CD' = True
  4266.     
  4267.     Category: Math String Float
  4268.     
  4269.  
  4270.     Computer Tyme * MarxMenu * Users Manual                 Page #65
  4271.     -----------------------------------------------------------------
  4272.     
  4273.      = : Operator
  4274.     
  4275.     Equal - Compares two numbers or strings.
  4276.     
  4277.      Example:
  4278.        3 = 4 = False
  4279.        'AB' - 'CD' = False
  4280.     
  4281.     Category: Math String Float
  4282.     
  4283.     
  4284.      > : Operator
  4285.     
  4286.     Greater Than - Compares two numbers or strings.
  4287.     
  4288.      Example:
  4289.        3 > 4 = False
  4290.        'AB' > 'CD' = False
  4291.     
  4292.     Category: Math String Float
  4293.     
  4294.     
  4295.      >= : Operator
  4296.     
  4297.     Greater Than or Equal - Compares two numbers or strings.
  4298.     
  4299.      Example:
  4300.        3 >= 4 = False
  4301.        'AB' >= 'CD' = False
  4302.     
  4303.     Category: Math String Float
  4304.     
  4305.     
  4306.      %MenuFileName : String
  4307.     
  4308.     This returns the name of the current menu file including the complete
  4309.     path. It can be used under an OnKey statement to edit the current menu
  4310.     as follows:
  4311.     
  4312.      Example:
  4313.        OnKey 'E'
  4314.          EDIT %MenuFileName
  4315.     
  4316.     Category: String
  4317.     
  4318.     
  4319.      Abs : Number
  4320.     
  4321.     Returns the absolute value of a number. The absolute value is the value
  4322.     of the number without the sign.
  4323.     
  4324.      Example:
  4325.         Abs(-6) returns 6
  4326.     
  4327.  
  4328.     Computer Tyme * MarxMenu * Users Manual                 Page #66
  4329.     -----------------------------------------------------------------
  4330.     
  4331.     Category: Math Float
  4332.     
  4333.     
  4334.      Actual
  4335.     
  4336.     If you want to read or write to a variable directly that is referencing
  4337.     another variable I have provided the command Actual. Actual overrides
  4338.     any pointers set by the command Loc.
  4339.     
  4340.      Example:
  4341.         Dispose Actual B
  4342.         Actual B = 5
  4343.     
  4344.     See Also: Loc
  4345.     
  4346.     Category: Variable
  4347.     
  4348.     
  4349.      Alias
  4350.     
  4351.     Alias <name> = <string>
  4352.     This is a compiler level text substitution command. When <name> is
  4353.     defined as <string> whenever you use <name> its the same to the compiler
  4354.     as if <string> were typed there.
  4355.     
  4356.      Example:
  4357.        Alias TwoPlusThree = "(2 + 3)"
  4358.        .
  4359.        .
  4360.        .
  4361.        2 * TwoPlusThree = 10
  4362.        .
  4363.        Writeln TwoPlusThree
  4364.     
  4365.     Writeln TwoPlusThree is the same as Writeln (2 + 3)
  4366.     
  4367.     Category: Misc
  4368.     
  4369.     
  4370.      AllowAbort (On/Off)
  4371.     
  4372.     MarxMenu was written to allow processes to be aborted and in a very
  4373.     smooth way eliminating the need for the user to deal with complicated
  4374.     error logic. In some cases this has gotten in the way of specific
  4375.     control when the user presses the escape key or other error occurs.
  4376.     
  4377.     If AllowAbort is set to off, MarxMenu will continue on to the next
  4378.     command. You can then test LastKey to see if the escape key was pressed.
  4379.     If the user presses escape a nul string is returned.
  4380.     
  4381.     See Also: AllowEsc
  4382.     
  4383.  
  4384.     Computer Tyme * MarxMenu * Users Manual                 Page #67
  4385.     -----------------------------------------------------------------
  4386.     
  4387.     Category: Misc
  4388.     
  4389.     
  4390.      AllowEsc (On/Off)
  4391.     
  4392.     Several MarxMenu commands such as PickOne, PickMany and PickFile allow
  4393.     you to press escape to abort. If you turn AllowEsc off then the escape
  4394.     key is ignored. This forces the user to make a choice.
  4395.     
  4396.     See Also: AllowAbort
  4397.     
  4398.     Category: Misc
  4399.     
  4400.     
  4401.      And : Operator
  4402.     
  4403.     Returns logical And if operators are boolean; or bitwise And if
  4404.     operators are numeric.
  4405.     
  4406.      Example:
  4407.        if (Month = Dec) and (Day = 25) then Writeln 'Merry Christmas!'
  4408.        7 and 3 = 3  ;0111 and 0011
  4409.     
  4410.     Note: The parentheses are necessary because MarxMenu interprets from
  4411.     right to left.
  4412.     
  4413.     See Also: Or Xor Not
  4414.     
  4415.     Category: Math Boolean
  4416.     
  4417.     
  4418.      AnsiWindows (On,Off)
  4419.     
  4420.     If AnsiWindow is set to On, MarxMenu interprets Ansi escape codes in a
  4421.     window.
  4422.     
  4423.     Category : Display
  4424.     
  4425.     
  4426.      AppendArray (Array,Value)
  4427.     
  4428.     AppendArray appends Value to the end of an array. The number of elements
  4429.     is increased by one. It is not used to append two arrays "end to end".
  4430.     
  4431.      Example:
  4432.        var X
  4433.        X[1] = 'TEST1'
  4434.        AppendArray(X,'TEST2')
  4435.     
  4436.        Loop X
  4437.           Writeln X[LoopIndex]
  4438.        EndLoop
  4439.     
  4440.  
  4441.     Computer Tyme * MarxMenu * Users Manual                 Page #68
  4442.     -----------------------------------------------------------------
  4443.     
  4444.      This Prints:
  4445.        TEST1
  4446.        TEST2
  4447.     
  4448.     Category: Array
  4449.     
  4450.     
  4451.      ApplicationMemory : Number
  4452.     
  4453.     Returns the number of bytes of memory available to an application when
  4454.     MarxMenu exits out to the MARX.BAT file. This is the actual amount of
  4455.     RAM available to your application.
  4456.     
  4457.     See Also: FreeMemory
  4458.     
  4459.     Category: Memory
  4460.     
  4461.     
  4462.      ArcTan (Radians) : Real
  4463.     
  4464.     Returns the ArcTangent of a real.
  4465.     
  4466.     Category: Math Float
  4467.     
  4468.     
  4469.      AssignList (2D Array)
  4470.     
  4471.     AssignList reads the network assign list table and return a 2
  4472.     dimensional array containing the local names and the network names.
  4473.     
  4474.      Example:
  4475.        var X
  4476.        AssignList (X)
  4477.     
  4478.        Loop X
  4479.           Writeln X[LoopIndex,1] '=' X[LoopIndex,2]
  4480.        EndLoop
  4481.     
  4482.     See Also: CancelListEntry MakeListEntry
  4483.     
  4484.     Category: Novell MSNet Vines
  4485.     
  4486.     
  4487.      BadDate : Boolean
  4488.     
  4489.     Set to true if you try to convert a string to a date and the date is
  4490.     invalid.
  4491.     
  4492.      Example:
  4493.        TimeOf('02-30-92')   ;Sets BadDate to True
  4494.     
  4495.     See Also: TimeOf
  4496.     
  4497.  
  4498.     Computer Tyme * MarxMenu * Users Manual                 Page #69
  4499.     -----------------------------------------------------------------
  4500.     
  4501.     Category: Time
  4502.     
  4503.     
  4504.      Bat (string)
  4505.     
  4506.     Bat is used to write a line to the batch file the same way that lines
  4507.     under OnKey commands do. All the same rules apply. The batch file is
  4508.     created when the menu exits. Bat statements give you more control over
  4509.     what MarxMenu executes and allow you to include the contents of MarxMenu
  4510.     variables in your batch files.
  4511.     
  4512.     When using Bat under an OnKey statement, be sure to use the vertical bar
  4513.     in front of it. Bat gives you more control over what is sent to the
  4514.     batch file that MARX.BAT executes.
  4515.     
  4516.      Example:
  4517.        OnKey 'D'
  4518.          CLS
  4519.          |BAT "DIR " + HomeDirectory + '\' + UserName
  4520.          PAUSE
  4521.     
  4522.     See Also: OnKey
  4523.     
  4524.     Category: Execution
  4525.     
  4526.     
  4527.      BatFileName : String
  4528.     
  4529.     Returns the name of the batch file that MarxMenu would create if
  4530.     MarxMenu were to create a batch file automatically.
  4531.     
  4532.     Category: String
  4533.     
  4534.     
  4535.      BigShadow
  4536.     
  4537.     Selects big shadow type. This is the default shadow.
  4538.     
  4539.     See Also: SmallShadow ShadowPosition ShadowColor
  4540.     
  4541.     Category: Display
  4542.     
  4543.     
  4544.      BinString (Number, Length) : String
  4545.     
  4546.     BinString converts a number into a base 2 binary string. If Length > 0
  4547.     then the number will have enough leading zeros to make it Length long.
  4548.     If Length = 0 then leading zeros are removed. Length must be 32 or less.
  4549.     
  4550.      Example:
  4551.        Writeln BinString(45,8)    ;returns 00101101
  4552.        Writeln BinString(45,0)    ;returns 101101
  4553.     
  4554.  
  4555.     Computer Tyme * MarxMenu * Users Manual                 Page #70
  4556.     -----------------------------------------------------------------
  4557.     
  4558.     See Also: HexString
  4559.     
  4560.     Category: String
  4561.     
  4562.     
  4563.      Blanked : Boolean
  4564.     
  4565.     Returns true if the screen blanker has kicked it. This lets you alter
  4566.     your idle program based on whether the screen blanker is active.
  4567.     
  4568.     See Also: IdleProgram
  4569.     
  4570.     Category: Display
  4571.     
  4572.     
  4573.      BlankMessage (string)
  4574.     
  4575.     When the screen blanks out, this one line message is displayed. If
  4576.     BlankMessage is not set, the date and time will be displayed.
  4577.     
  4578.      Example:
  4579.        BlankMessage = 'Out to Lunch!'
  4580.     
  4581.     See Also: ConsolePos
  4582.     
  4583.     Category: String
  4584.     
  4585.     
  4586.      BlankScreenProgram : Procedure
  4587.     
  4588.     This allows you to specify a custom procedure to have executed in place
  4589.     of the MarxMenu internal screen blanker. It also overrides the
  4590.     IdleProgram so if you are running something in your idle program that
  4591.     you want to continue to run when the screen goes blank, call your idle
  4592.     procedure from the screen blanker procedure.
  4593.     
  4594.     If you exit your screen blanker and MarxMenu thinks the screen should
  4595.     still be blank it will call it again. You can set UnBlank to True in
  4596.     your screen blanking program to override this and unblank the screen.
  4597.     
  4598.     When MarxMenu determines it's time to activate the screen blanker, it
  4599.     first blanks the screen then calls the BlankScreenProgram. When MarxMenu
  4600.     decides it's ready to unblank the screen it sets UnBlank to true.  When
  4601.     your BlankScreenProgram procedure is finished, MarxMenu will restore
  4602.     your screen to it's original condition upon exit.
  4603.     
  4604.     Commands like UseNovPassword, LockWord, and BlankTime will work with
  4605.     your screen blanker.
  4606.     
  4607.     To set up a blank screen program:
  4608.     
  4609.  
  4610.     Computer Tyme * MarxMenu * Users Manual                 Page #71
  4611.     -----------------------------------------------------------------
  4612.     
  4613.     BlankScreenProgram = Loc Procedure
  4614.     
  4615.      Example:
  4616.        BlankScreenProgram = Loc RunWorm
  4617.     
  4618.     To switch back to normal screen blanking run:
  4619.     
  4620.      Dispose(ScreenBlankProgram)
  4621.     
  4622.     For an example of a blank screen look at WORM.INC.
  4623.     
  4624.     The BlankScreenProgram can be used to run an external program to blank
  4625.     the screen.  So if you have some slick fractal program that you like
  4626.     MarxMenu will run it.  Here's how you would set it up.
  4627.     
  4628.      BlankScreenProgram = Loc BlankProg
  4629.     
  4630.      Procedure BlankProg
  4631.         Execute 'FRACTAL.EXE'
  4632.         UnBlank = True
  4633.      EndProc
  4634.     
  4635.     See Also: IdleProgram UnBlank
  4636.     
  4637.     Category: Display
  4638.     
  4639.     
  4640.      BlankTime (minutes)
  4641.     
  4642.     Sets the number of minutes before the screen blanks out to prevent
  4643.     screen burn. Since this is not a resident program, screen blanking is
  4644.     only active while the menu system is active. Setting BlankTime to 0
  4645.     prevents screen blanking.
  4646.     
  4647.      Example:
  4648.        BlankTime = 10  ;set to 10 minutes
  4649.        BlankTime = 0   ;disables screen blanking
  4650.        Writeln BlankTime " Minutes of inactivity will cause screen blanking."
  4651.     
  4652.     Category: Display
  4653.     
  4654.     
  4655.      Blink : Boolean
  4656.     
  4657.     Blink is a boolean variable that when set to true allows you to specify
  4658.     colors that will blink. To make a color that blinks, set the background
  4659.     color to a bright color. A bright color is a color from 8 to 15.
  4660.     
  4661.     Normally, when Blink is off, MarxMenu strips the high bit of the colors.
  4662.     When Blink is on, high bit stripping is disabled.
  4663.     
  4664.  
  4665.     Computer Tyme * MarxMenu * Users Manual                 Page #72
  4666.     -----------------------------------------------------------------
  4667.     
  4668.      Example:
  4669.        Blink
  4670.        TextColor Green LRed
  4671.     
  4672.     Because the background color is light red, the text will blink.
  4673.     
  4674.     Warning: Blinking characters can cause headaches and eye strain. I
  4675.     resisted adding this feature for a long time because I personally hate
  4676.     excessive blinking characters on the screen. I now recognize that
  4677.     blinking can be very effective when used correctly. Please use blinking
  4678.     sparingly.
  4679.     
  4680.     Category: Color
  4681.     
  4682.     
  4683.      BlockBox
  4684.     
  4685.     Selects menu borders to have a block type edge.
  4686.     
  4687.     See Also: SingleLineBox DoubleLineBox CustomBox NoBoxBorder
  4688.     
  4689.      Example:
  4690.        BoxBordercolor yellow black
  4691.        BoxInsideColor White Black
  4692.        BlockBox                      ;<- Set Border Type to Block Style
  4693.        DrawBox 10 10 60 10
  4694.     
  4695.     Category: Display
  4696.     
  4697.     
  4698.      BootDrive : String
  4699.     
  4700.     Returns the drive letter of the boot drive. This command only works with
  4701.     DOS 4+, on all other versions of DOS it returns a null string. On
  4702.     diskless workstations the BootDrive will be A.
  4703.     
  4704.     Category: File
  4705.     
  4706.     
  4707.      BoxBorderColor (forecolor,backcolor)
  4708.     
  4709.     Sets colors for box border.
  4710.     
  4711.      Example:
  4712.        BoxBordercolor LRed black     ;<- Set Border Colors to LRed/Black
  4713.        BoxInsideColor White Black
  4714.        BlockBox
  4715.        DrawBox 10 10 60 10
  4716.     
  4717.     Category: Color
  4718.     
  4719.  
  4720.     Computer Tyme * MarxMenu * Users Manual                 Page #73
  4721.     -----------------------------------------------------------------
  4722.     
  4723.      BoxHeader (string)
  4724.     
  4725.     There are three possible box header strings.  This command sets the
  4726.     center header message for the next box displayed. This command must be
  4727.     used before the DrawBox command.
  4728.     
  4729.      Example:
  4730.        BoxHeader ' Center BoxHeader String ' ;<- Sets the Box Header String
  4731.        BoxBordercolor LRed Black
  4732.        BoxInsideColor White Black
  4733.        BlockBox
  4734.        DrawBox 5,6,70,9
  4735.     
  4736.     See Also: BoxHeaderLeft BoxHeaderRight
  4737.     See Also: BoxFooter BoxFooterLeft BoxFooterRight
  4738.     
  4739.     Category: Display
  4740.     
  4741.     
  4742.      BoxHeaderColor (forecolor,backcolor)
  4743.     
  4744.     There are three possible box header strings. This command sets colors
  4745.     for all the box headers and box footers strings.
  4746.     
  4747.      Example:
  4748.        BoxHeader ' Center Box Header String '
  4749.        BoxFooter ' Box Footer String '
  4750.        BoxBordercolor LRed Black
  4751.        BoxInsideColor White Black
  4752.        BoxHeaderColor Yellow Black       ;<-- Set Box Header/Footer Colors
  4753.        DrawBox 5,6,70,9
  4754.     
  4755.     Category: Color
  4756.     
  4757.     
  4758.      BoxHeaderLeft (string)
  4759.     
  4760.     There are three possible box header strings. This command sets the
  4761.     left header message for the next box displayed. This command must be
  4762.     used before the DrawBox command.
  4763.     
  4764.      Example:
  4765.        BoxHeaderLeft ' Left Header String ' ;<- Set Left Header String
  4766.        BoxBordercolor LRed Black
  4767.        BoxInsideColor White Black
  4768.        BoxHeaderColor Yellow Black
  4769.        DrawBox 5,6,70,9
  4770.     
  4771.     See Also: BoxHeader BoxHeaderRight
  4772.     See Also: BoxFooter BoxFooterLeft BoxFooterRight
  4773.     
  4774.  
  4775.     Computer Tyme * MarxMenu * Users Manual                 Page #74
  4776.     -----------------------------------------------------------------
  4777.     
  4778.     Category: Display
  4779.     
  4780.     
  4781.      BoxHeaderRight (string)
  4782.     
  4783.     There are three possible box header strings. This command sets the
  4784.     right header message for the next box displayed. This command must be
  4785.     used before the DrawBox command.
  4786.     
  4787.      Example:
  4788.        BoxHeaderRight 'Right Header String ';<- Set Right Header String
  4789.        BoxBordercolor LRed Black
  4790.        BoxInsideColor White Black
  4791.        BoxHeaderColor Yellow Black
  4792.        DrawBox 5,6,70,9
  4793.     
  4794.     See Also: BoxHeader BoxHeaderLeft
  4795.     See Also: BoxFooter BoxFooterLeft BoxFooterRight
  4796.     
  4797.     Category: Display
  4798.     
  4799.     
  4800.      BoxFooter (string)
  4801.     
  4802.     There are three possible box footer strings. This command sets the
  4803.     center footer message for the next box displayed. This command must be
  4804.     used before the DrawBox command.
  4805.     
  4806.      Example:
  4807.        BoxHeader ' Center Box Header String '
  4808.        BoxFooter ' Box Footer String '   ;<-- Set Center Footer String
  4809.        BoxBordercolor LRed Black
  4810.        BoxInsideColor White Black
  4811.        BoxHeaderColor Ye9llow Black
  4812.        DrawBox 5,6,70,9
  4813.     
  4814.     See Also: BoxHeader BoxHeaderLeft BoxHeaderRight
  4815.     See Also: BoxFooterLeft BoxFooterRight
  4816.     
  4817.     Category: Display
  4818.     
  4819.     
  4820.      BoxFooterLeft (string)
  4821.     
  4822.     There are three possible box footer strings. This command sets the
  4823.     Left Footer message for the next box displayed. This command must be
  4824.     used before the DrawBox command.
  4825.     
  4826.      Example:
  4827.        BoxFooter ' Center Footer String '
  4828.        BoxFooterLeft ' Left Footer String '   ;<-- Set Left Footer String
  4829.        BoxFooterRight ' Right Footer String '
  4830.        BoxBordercolor LRed Black
  4831.        BoxInsideColor White Black
  4832.        BoxHeaderColor Yellow Black
  4833.        DrawBox 5,6,70,9
  4834.     
  4835.  
  4836.     Computer Tyme * MarxMenu * Users Manual                 Page #75
  4837.     -----------------------------------------------------------------
  4838.     
  4839.     See Also: BoxHeader BoxHeaderLeft BoxHeaderRight
  4840.     See Also: BoxFooter BoxFooterRight
  4841.     
  4842.     Category: Display
  4843.     
  4844.     
  4845.      BoxFooterRight (string)
  4846.     
  4847.     There are three possible box footer strings. This command sets the
  4848.     Right Footer message for the next box displayed. This command must be
  4849.     used before the DrawBox command.
  4850.     
  4851.      Example:
  4852.        BoxFooter ' Center Footer String '
  4853.        BoxFooterLeft ' Left Footer String '
  4854.        BoxFooterRight ' Right Footer String ' ;<-- Set Right Footer String
  4855.        BoxHeaderColor Yellow Black
  4856.        BoxBordercolor LRed Black
  4857.        BoxInsideColor White Black
  4858.        DrawBox 5,6,70,9
  4859.     
  4860.     See Also: BoxHeader BoxHeaderLeft BoxHeaderRight
  4861.     See Also: BoxFooter BoxFooterLeft
  4862.     
  4863.     Category: Display
  4864.     
  4865.     
  4866.      BoxInsideColor (forecolor,backcolor)
  4867.     
  4868.     This command sets the colors for the interior of a box.
  4869.     
  4870.      Example:
  4871.        BoxBordercolor LRed Black
  4872.        BoxInsideColor White Black  ;<- Set Inside Colors to White on Black
  4873.        DrawBox 5,6,70,9
  4874.     
  4875.     Category: Color
  4876.     
  4877.     
  4878.      Break (On/Off)
  4879.     
  4880.     Turns DOS break checking on and off the same way that it does from
  4881.     batch files.
  4882.     
  4883.     Category: System
  4884.     
  4885.  
  4886.     Computer Tyme * MarxMenu * Users Manual                 Page #76
  4887.     -----------------------------------------------------------------
  4888.     
  4889.      BrightBackground (On/Off)
  4890.     
  4891.     This command switches between bright background modes and blink modes.
  4892.     This doubles the number of colors that MarxMenu can produce.
  4893.     
  4894.     This command affects the video controller directly. Thus, it may not
  4895.     work on all computers especially if you are running something weird.
  4896.     
  4897.     Once this is set in MarxMenu it stays set. So if you run another program
  4898.     that has blink in it, it will use 16 background colors instead. The
  4899.     solution is to set BrightBackground Off right before you run a program
  4900.     that requires blinking.
  4901.     
  4902.      Example:
  4903.        OnKey 'X'
  4904.          |BrightBackground Off
  4905.          PROCOMM
  4906.     
  4907.     Warning! This program uses a trick that may not be compatible with some
  4908.     TSR programs. If you can get away with it, fine. But, if you have
  4909.     problems where TSR's cause your screen to blink, then don't use this
  4910.     command.
  4911.     
  4912.     Category: Display
  4913.     
  4914.     
  4915.      BuildPath (Array)
  4916.     
  4917.     The command BuildPath will build a PATH environment variable based upon
  4918.     the contents of a specified Array variable. The first element in the
  4919.     array becomes the first search path.
  4920.     
  4921.      Example:
  4922.        Var PathList
  4923.        Pathlist[1] = 'F:\PUBLIC'
  4924.        Pathlist[2] = 'F:\DOS'
  4925.        Pathlist[3] = 'F:\UTIL'
  4926.        BuildPath (PathList)  ;sets PATH=F:\PUBLIC;F:\DOS;F:\UTIL
  4927.     
  4928.     See Also: SplitPath FixPath
  4929.     
  4930.     Category: String Array Environment
  4931.     
  4932.     
  4933.      CancelListEntry (Local Name)
  4934.     
  4935.     This will take an entry out of the network redirection list for either a
  4936.     print redirection or disk drive redirection.
  4937.     
  4938.      Example:
  4939.        CancelListEntry 'P:'    ;cancels network drive mapping
  4940.        CancelListEntry 'LPT1'  ;cancels printer redirection
  4941.     
  4942.  
  4943.     Computer Tyme * MarxMenu * Users Manual                 Page #77
  4944.     -----------------------------------------------------------------
  4945.     
  4946.     See Also: AssignList MakeListEntry
  4947.     
  4948.     Category: Novell MSNet Vines
  4949.     
  4950.     
  4951.      CapsColor (forecolor,backcolor)
  4952.     
  4953.     Setting CapsColor allows capital letters and numbers to be a different
  4954.     color than the rest of the text. This is used with the UseArrows command
  4955.     to show which character is the one that selects the options in the
  4956.     window. CapsColor is reset after any TextColor command, so be sure to
  4957.     use CapsColor AFTER TextColor commands.
  4958.     
  4959.     For this option the numbers 0 - 9 and some punctuation characters are
  4960.     considered capitals.
  4961.     
  4962.      Example:
  4963.        CapsColor White Blue
  4964.     
  4965.     See Also: DrawBox
  4966.     
  4967.     Category: Color
  4968.     
  4969.     
  4970.      CapsLock : Boolean
  4971.     
  4972.     This variable can be used to read the status of the KeyBoard Caps Lock
  4973.     indicator and to set the current caps lock mode.
  4974.     
  4975.      Example:
  4976.        if CapsLock then Write 'CapsLock is On'
  4977.     
  4978.        CapsLock On  ;Turns CapsLock On
  4979.        CapsLock Off ;Turns CapsLock Off
  4980.     
  4981.        CapsLock ; (by itself) turns CapsLock On.
  4982.     
  4983.        if CapsLock
  4984.           <do something>
  4985.        endif
  4986.     
  4987.     See Also: ScrollLock NumLock
  4988.     
  4989.     Category: System
  4990.     
  4991.  
  4992.     Computer Tyme * MarxMenu * Users Manual                 Page #78
  4993.     -----------------------------------------------------------------
  4994.     
  4995.      Chain (MenuName)
  4996.     
  4997.     This command will load a new menu. Unlike Jump, MarxMenu stays in
  4998.     memory. The screen is not cleared. If the new menu has exactly the same
  4999.     global variables, the contents of all global variables is retained.
  5000.     Chain allows for a very quick transfer from one menu to another.
  5001.     
  5002.      Example:
  5003.        OnKey 'P'
  5004.          |Chain ('USER')  ;Chains to USER.MNU
  5005.     
  5006.     Category: Execution
  5007.     
  5008.     
  5009.      Char (number) : String
  5010.     
  5011.     Converts a number into a one character string.
  5012.     
  5013.      Example:
  5014.        Write (Char(65)) ;This will display 'A'
  5015.     
  5016.     See Also: Ord
  5017.     
  5018.     Category: String
  5019.     
  5020.     
  5021.      ChDir (string)
  5022.     
  5023.     Changes directories. The variable FileResult can be tested to see if it
  5024.     was successful. ChDir can also be used to change drives.
  5025.     
  5026.      Example:
  5027.        ChDir( 'C:\HOME\MARXMENU' )
  5028.        ChDir( 'B:' )                ; Will make drive B: the current drive
  5029.     
  5030.     Category: Directory
  5031.     
  5032.     
  5033.      CleanFileName (string) : String
  5034.     
  5035.     Returns the full path name or directory name of a string. It also
  5036.     removes occurrences of a '\\' in the string if they aren't at the
  5037.     beginning of the string.
  5038.     
  5039.      Thus the command:
  5040.         CleanFileName('a:\' + '\main.mnu') returns 'A:\MAIN.MNU'.
  5041.     
  5042.     CleanFileName also removes extra ending '\' and capitalizes the path.
  5043.     
  5044.     See Also: TrueName
  5045.     
  5046.  
  5047.     Computer Tyme * MarxMenu * Users Manual                 Page #79
  5048.     -----------------------------------------------------------------
  5049.     
  5050.     Category: String
  5051.     
  5052.     
  5053.      ClearLine [char]
  5054.     
  5055.     Clears the current line in the current window. The optional parameter is
  5056.     for the decimal number of the IBM graphics character. If [char] is
  5057.     present, the line will be filled with the character.
  5058.     
  5059.      Examples:
  5060.         ClearLine       ;Clears screen with blanks
  5061.         ClearLine 205   ;Clears screen with char 205
  5062.     
  5063.     Category: Display Ansi
  5064.     
  5065.     
  5066.      ClearScreen [char]
  5067.     
  5068.     Clears the screen. The optional parameter is the decimal number
  5069.     equivalent for an IBM graphics character. If [char] is present, the
  5070.     screen will be filled with [char].
  5071.     
  5072.      Examples:
  5073.         ClearScreen       ;Clears screen with blanks
  5074.         ClearScreen 177   ;Clears screen with char 177
  5075.     
  5076.     Category: Display Ansi
  5077.     
  5078.     
  5079.      ClearScreenFirst (on/off)
  5080.     
  5081.     Used in conjunction with Execute. If on, will clear the screen before
  5082.     running the program.
  5083.     
  5084.      Example:
  5085.        OnKey 'D'
  5086.          |ClearScreenFirst On
  5087.          |Execute 'C:\DM.COM'
  5088.     
  5089.     The default is ON.
  5090.     
  5091.     See Also: Execute
  5092.     
  5093.     Category: Execution
  5094.     
  5095.     
  5096.      ClearScreenOnExit (on/off)
  5097.     
  5098.     Controls whether or not the screen is cleared on menu exit. Default on.
  5099.     
  5100.     See Also: Execute
  5101.     
  5102.  
  5103.     Computer Tyme * MarxMenu * Users Manual                 Page #80
  5104.     -----------------------------------------------------------------
  5105.     
  5106.     Category: Display
  5107.     
  5108.     
  5109.      ClockColor (forecolor,backcolor)
  5110.     
  5111.     Sets colors for the on screen clock.
  5112.     
  5113.      Example:
  5114.        ClockColor Yellow Brown
  5115.     
  5116.     Category: Color
  5117.     
  5118.     
  5119.      ClockMode
  5120.     
  5121.     ClockMode is a variable whose bits control the format of the on screen
  5122.     clock when it is used.
  5123.     
  5124.      ClockMode Bits:
  5125.      ---------------
  5126.      0 24 hour mode
  5127.      1 AmPm On
  5128.      2 Show Seconds
  5129.      3 UpperCase
  5130.      4 3 char month
  5131.      5 3 char Day of Week
  5132.      6 Show Day of Week
  5133.      7 Dash = 0 Slash = 1 MM-DD-YY or MM/DD/YY
  5134.      8 Long Date
  5135.     
  5136.      Bit 0 on sets hours display to 24 hour mode.
  5137.      Bit 1 turns on the Am/Pm display.
  5138.      Bit 2 on controls if time is shown as HH:MM:SS or just HH:MM.
  5139.      Bit 3 shows date in only upper case.
  5140.      Bit 4 on shows month in 3 characters.
  5141.      Bit 5 shows Day of week as 3 characters.
  5142.      Bit 6 controls if Day of week is displayed.
  5143.      Bit 7 controls if date is shown as MM-DD-YY or MM/DD/YY.
  5144.      Bit 8 shows date in text. (October 3, 1990).
  5145.     
  5146.     The default ClockMode is 326.
  5147.     
  5148.      Example:
  5149.        ClockMode 120
  5150.        ClockColor White Red
  5151.        ClockPos 1,1
  5152.     
  5153.     Category: Display
  5154.     
  5155.  
  5156.     Computer Tyme * MarxMenu * Users Manual                 Page #81
  5157.     -----------------------------------------------------------------
  5158.     
  5159.      ClockPos (column,row)
  5160.     
  5161.     Puts a clock on the screen at location (column,row). The command
  5162.     ClockPos 0 0 turns the clock off.
  5163.     
  5164.      Example:
  5165.        ClockPos 7 2
  5166.     
  5167.     Category: Display
  5168.     
  5169.     
  5170.      ClosePrinter
  5171.     
  5172.     In MarxMenu the printer is just another text file. Closing the printer
  5173.     is not required for ordinary printing. If you are changing printers you
  5174.     need to run ClosePrinter before changing the printer name. The printer
  5175.     is automatically opened by MarxMenu any time you print anything.
  5176.     
  5177.     If you are running Windows or DesqView, closing the printer allows other
  5178.     programs to access the printer. So if you are running under any
  5179.     multitasking shell, be sure to close the printer when you are done with
  5180.     it.
  5181.     
  5182.     If you are using a network like Novell, ClosePrinter will end the print
  5183.     job and send it to the print queue. This avoids the need to wait for
  5184.     print capture timeouts to take effect.
  5185.     
  5186.     Closing the printer is good programming practice and will help you stay
  5187.     out of trouble. It's like what your mother taught you. "When you're done
  5188.     with something, put it away."
  5189.     
  5190.     See Also: OpenPrinter PrinterName
  5191.     
  5192.     Category: Printer
  5193.     
  5194.     
  5195.      ClusterSize <drive> : Number
  5196.     
  5197.     Returns cluster size in bytes.
  5198.     
  5199.      Example:
  5200.        Writeln (ClusterSize 'C')
  5201.     
  5202.     ClusterSize only looks at the first character of the string for the
  5203.     drive letter.
  5204.     
  5205.      Example:
  5206.        ClusterSize (Path)  ;returns clustersize of current drive.
  5207.     
  5208.     Category: System
  5209.     
  5210.  
  5211.     Computer Tyme * MarxMenu * Users Manual                 Page #82
  5212.     -----------------------------------------------------------------
  5213.     
  5214.      CmdLine : String
  5215.     
  5216.     A System string variable that returns the rest of the command line after
  5217.     the menu name. If you execute MARXMENU GOFILE *.BAT the CmdLine command
  5218.     would return "*.BAT".
  5219.     
  5220.      Example:
  5221.        writeln cmdline  ;returns the command line after the menu name.
  5222.     
  5223.     Category: String
  5224.     
  5225.     
  5226.      CMOS (Number) : Number
  5227.     
  5228.     CMOS allows reads from and write to the CMOS RAM on the clock chip.
  5229.     
  5230.      Example:
  5231.        Writeln CMOS(16)
  5232.        CMOS(16) = $42
  5233.     
  5234.     Category: System
  5235.     
  5236.     
  5237.      ColdBoot
  5238.     
  5239.     Causes a cold reboot of the computer. This differs from a warm boot in
  5240.     that it is a complete system reset that forces the computer to go
  5241.     through the (POST, Power On Self Test) process. A warm boot does not
  5242.     force a complete reset.
  5243.     
  5244.     See Also: Reboot
  5245.     
  5246.     Category: Execution
  5247.     
  5248.     
  5249.      ColorScreen : Boolean
  5250.     
  5251.     Returns true if screen is a color screen and in a color mode.  Note:
  5252.     Running MODE BW80 will cause ColorScreen to return false.
  5253.     
  5254.      Example:
  5255.        If ColorScreen
  5256.            ;Color
  5257.          TextColor( White, Blue )
  5258.        Else
  5259.            ;Monochrome
  5260.          TextColor( White, Black )
  5261.        EndIf
  5262.     
  5263.     Category: Display
  5264.     
  5265.  
  5266.     Computer Tyme * MarxMenu * Users Manual                 Page #83
  5267.     -----------------------------------------------------------------
  5268.     
  5269.      ComBaud : Number
  5270.     
  5271.     Reads or sets the baud rate. Range from 110 to 115,000 baud.
  5272.     
  5273.      Example:
  5274.        ComBaud = 9600
  5275.        Writeln ComBaud
  5276.     
  5277.     See Also: ComDataBits ComStopBits ComParity
  5278.     
  5279.     Category: Modem
  5280.     
  5281.     
  5282.      ComBlockErrors : Number
  5283.     
  5284.     During an upload or download ComBlockErrors returns the number of
  5285.     errors that occurred during the current block.
  5286.     
  5287.     See Also: ComXmitStatusProgram
  5288.     
  5289.     Category: Modem
  5290.     
  5291.     
  5292.      ComBlockNumber : Number
  5293.     
  5294.     During an upload or download ComBlockNumber returns the current block
  5295.     number.
  5296.     
  5297.     See Also: ComXmitStatusProgram
  5298.     
  5299.     Category: Modem
  5300.     
  5301.     
  5302.      ComBlockSize : Number
  5303.     
  5304.     During an upload or download ComBlockSize returns the number of bytes in
  5305.     the block that's being transferred.
  5306.     
  5307.     See Also: ComXmitStatusProgram
  5308.     
  5309.     Category: Modem
  5310.     
  5311.     
  5312.      ComBreakReceived : Boolean
  5313.     
  5314.     Returns True if a break signal has been received at the serial port.
  5315.     
  5316.      Example:
  5317.         if ComBreakReceived then Writeln 'Break Received'
  5318.     
  5319.     See Also: ComSendBreak
  5320.     
  5321.  
  5322.     Computer Tyme * MarxMenu * Users Manual                 Page #84
  5323.     -----------------------------------------------------------------
  5324.     
  5325.     Category: Modem
  5326.     
  5327.     
  5328.      ComBytesRemaining : Number
  5329.     
  5330.     During an upload or download ComBytesRemaining returns the number of
  5331.     bytes that is yet to be transferred.
  5332.     
  5333.     See Also: ComXmitStatusProgram
  5334.     
  5335.     Category: Modem
  5336.     
  5337.     
  5338.      ComBytesTransferred : Number
  5339.     
  5340.     During an upload or download ComBytesTransferred returns the number of
  5341.     bytes that has been transferred.
  5342.     
  5343.     See Also: ComXmitStatusProgram
  5344.     
  5345.     Category: Modem
  5346.     
  5347.     
  5348.      ComCD : Boolean
  5349.     
  5350.     Returns the status of the carrier detect line on serial ports.
  5351.     
  5352.      Example:
  5353.        if ComCD then Writeln 'Carrier Detected'
  5354.     
  5355.     Category: Modem
  5356.     
  5357.     
  5358.      ComCDAbort : Boolean
  5359.     
  5360.     ComCDAbort is set to True if ComWatchCD is on and the carrier is lost.
  5361.     This is used as a signal to indicate that the modem has lost connection
  5362.     and the host program should reset and prepare for the next call.
  5363.     
  5364.     See Also: ComWatchCD
  5365.     
  5366.     Category: Modem
  5367.     
  5368.     
  5369.      ComCharReady : Boolean
  5370.     
  5371.     Tests to see if a character has been received in the input buffer.
  5372.     
  5373.      Example:
  5374.        if ComCharReady then Ch = ComReadChar
  5375.     
  5376.     See Also: ComReadChar
  5377.     
  5378.  
  5379.     Computer Tyme * MarxMenu * Users Manual                 Page #85
  5380.     -----------------------------------------------------------------
  5381.     
  5382.     Category: Modem
  5383.     
  5384.     
  5385.      ComDataBits : Number
  5386.     
  5387.     Reads or sets the number of data bits. Range 5 - 8 bits.
  5388.     
  5389.      Example:
  5390.        ComDataBits = 8
  5391.        Writeln ComDataBits
  5392.     
  5393.     See Also: ComBaud ComStopBits ComParity
  5394.     
  5395.     Category: Modem
  5396.     
  5397.     
  5398.      ComDone
  5399.     
  5400.     UnInitializes the port. Deallocates memory used by ComInitPort and
  5401.     restores interrupt vectors.
  5402.     
  5403.     See Also: ComInitPort
  5404.     
  5405.     Category: Modem
  5406.     
  5407.     
  5408.      ComDrainSendBuffer
  5409.     
  5410.     ComDrainSendBuffer waits till all the characters in the send buffer go
  5411.     to the modem. This allows the other end to get the last of the goodbye
  5412.     message without being cut off by a hangup. With buffered modems you
  5413.     should wait a few seconds after this command before hanging up the modem
  5414.     to ensure that all the data has been transferred.
  5415.     
  5416.     Category: Modem
  5417.     
  5418.     
  5419.      ComDTR (On/Off)
  5420.     
  5421.     Turns DTR (Data Terminal Ready) on or off. Setting DTR to off can be
  5422.     used to hang up a modem.
  5423.     
  5424.      Example:
  5425.        ComDTR Off
  5426.     
  5427.     Category: Modem
  5428.     
  5429.  
  5430.     Computer Tyme * MarxMenu * Users Manual                 Page #86
  5431.     -----------------------------------------------------------------
  5432.     
  5433.      ComEchoRecChar : Boolean
  5434.     
  5435.     When ComEchoRecChar is set to true then characters received are echoed
  5436.     back to the sender. This option is useful when writing a host
  5437.     communication program. The echoed character is inteligently processed.
  5438.     
  5439.     See Also: ComReadChar
  5440.     
  5441.     Category: Modem
  5442.     
  5443.     
  5444.      ComEchoSendChar : Boolean
  5445.     
  5446.     When ComEchoSendChar is set to true then characters sent are echoed
  5447.     to the local screen. This option is useful when writing a host
  5448.     communication program. The echoed character is inteligently processed.
  5449.     When set to true, the following commands will also be processed for
  5450.     correct Com port output:  TextColor, GotoXY, ClearScreen, ClearLine.
  5451.     
  5452.     See Also: ComReadChar ComEchoRecChar
  5453.     
  5454.     Category: Modem
  5455.     
  5456.     
  5457.      ComEmptyRecBuffer
  5458.     
  5459.     ComEmptyRecBuffer trashes the data in the receive buffer. This allows
  5460.     you to get rid of incoming trash data.
  5461.     
  5462.     See Also: ComEmptySendBuffer
  5463.     
  5464.     Category: Modem
  5465.     
  5466.     
  5467.      ComEmptySendBuffer
  5468.     
  5469.     ComEmptySendBuffer trashes all the data in the send buffer that hasn't
  5470.     been transferred. This allows you to create a hot key effect and makes
  5471.     host programs act more responsive.
  5472.     
  5473.     See Also: ComEmptyRecBuffer
  5474.     
  5475.     Category: Modem
  5476.     
  5477.     
  5478.      ComErrorLimit : Number
  5479.     
  5480.     ComErrorLimit is the maximum number of errors that a file transfer can
  5481.     have before an automatic transfer abort occurs. If set to 0 then it will
  5482.     keep trying forever. The default limit is 100.
  5483.     
  5484.     Category: Modem
  5485.     
  5486.  
  5487.     Computer Tyme * MarxMenu * Users Manual                 Page #87
  5488.     -----------------------------------------------------------------
  5489.     
  5490.      ComFileName : String
  5491.     
  5492.     During an upload or download ComFileName returns the name of the file
  5493.     being transferred.
  5494.     
  5495.     See Also: ComXmitStatusProgram
  5496.     
  5497.     Category: Modem
  5498.     
  5499.     
  5500.      ComFileSize : Number
  5501.     
  5502.     During an upload or download ComFileSize returns the size of the file
  5503.     being transferred.
  5504.     
  5505.     See Also: ComXmitStatusProgram
  5506.     
  5507.     Category: Modem
  5508.     
  5509.     
  5510.      ComInitPort (Baud,DataBits,Parity,StopBits)
  5511.     
  5512.     Initializes the ComPort. This must be run first before any other comport
  5513.     command is executed.
  5514.     
  5515.      Example:
  5516.        ComInitPort(38400,8,'N',1)
  5517.     
  5518.     See Also: ComDone
  5519.     
  5520.     Category: Modem
  5521.     
  5522.     
  5523.      ComLastChar : String
  5524.     
  5525.     ComLastChar returns the last character that was received with
  5526.     ComReadChar.
  5527.     
  5528.     See Also: ComReadChar ComCharReady ComReadTimeout ComReadln
  5529.     
  5530.     Category: Modem
  5531.     
  5532.     
  5533.      ComLastLine : String
  5534.     
  5535.     ComLastLine returns the last line that was recieved that is not a blank
  5536.     line. BackSpace characters are handled correctly.
  5537.     
  5538.     Category: Modem
  5539.     
  5540.  
  5541.     Computer Tyme * MarxMenu * Users Manual                 Page #88
  5542.     -----------------------------------------------------------------
  5543.     
  5544.      ComParity : String
  5545.     
  5546.     Reads or sets the parity.
  5547.     
  5548.      N - None
  5549.      E - Even
  5550.      O - Odd
  5551.      M - Mark
  5552.      S - Space
  5553.     
  5554.      Example:
  5555.        ComParity = 'E'
  5556.        Writeln ComParity
  5557.     
  5558.     See Also: ComBaud ComDataBits ComStopBits
  5559.     
  5560.     Category: Modem
  5561.     
  5562.     
  5563.      ComPort : Number
  5564.     
  5565.     Sets or reads the port that communication commands will effect.
  5566.     
  5567.      Example:
  5568.        ComPort = Com1
  5569.        Writeln ComPort
  5570.     
  5571.     Category: Modem
  5572.     
  5573.     
  5574.      ComProtocol : String
  5575.     
  5576.     During an upload or download ComProtocol returns the name of the
  5577.     transfer protocol being used.
  5578.     
  5579.     See Also: ComXmitStatusProgram
  5580.     
  5581.     Category: Modem
  5582.     
  5583.     
  5584.      ComReadChar : String
  5585.     
  5586.     Reads one character from the com port or input buffer. It will wait up
  5587.     to ComReadTimeout ticks for the character. If no character is received
  5588.     then ComTimeOut is set to True. If the ComStripHighBit command it set
  5589.     them this command will automatically remove the high-order bit when
  5590.     reading a character.
  5591.     
  5592.      Example:
  5593.        Ch = ComReadChar
  5594.     
  5595.  
  5596.     Computer Tyme * MarxMenu * Users Manual                 Page #89
  5597.     -----------------------------------------------------------------
  5598.     
  5599.     See Also: ComCharReady ComReadTimeout ComReadln
  5600.     
  5601.     Category: Modem
  5602.     
  5603.     
  5604.      ComReadln : String
  5605.     
  5606.     Reads a line from the com port or input buffer. It will wait up to
  5607.     ComReadTimeout ticks for the character. If no character is received then
  5608.     ComTimeOut is set to True.
  5609.     
  5610.      Example:
  5611.        if ComReadln = 'OK' then
  5612.     
  5613.     See Also: ComReadChar ComCharReady ComReadTimeout
  5614.     
  5615.     Category: Modem
  5616.     
  5617.     
  5618.      ComReadTimeout : Number
  5619.     
  5620.     This variable controls the number of timer ticks (18.2 ticks per second)
  5621.     that a read command will wait to receive data.
  5622.     
  5623.      Example:
  5624.         ComReadTimeout = 36  ;2 seconds
  5625.     
  5626.     Category: Modem
  5627.     
  5628.     
  5629.      ComRec1kXmodem (FileName)
  5630.     
  5631.     Receive a file by 1k Xmodem protocol.
  5632.     
  5633.      Example:
  5634.        ComRec1kXmodem 'MXMENU.ZIP'
  5635.     
  5636.     See Also: ComSend1kXmodem
  5637.     
  5638.     Category: Modem
  5639.     
  5640.     
  5641.      ComRecKermit
  5642.     
  5643.     Receive files by Kermit protocol.
  5644.     
  5645.      Example:
  5646.        ComRecKermit
  5647.     
  5648.     See Also: ComSendKermit
  5649.     
  5650.     Category: Modem
  5651.     
  5652.  
  5653.     Computer Tyme * MarxMenu * Users Manual                 Page #90
  5654.     -----------------------------------------------------------------
  5655.     
  5656.      ComRecXmodem (FileName)
  5657.     
  5658.     Receive a file by Xmodem protocol.
  5659.     
  5660.      Example:
  5661.        ComRecXmodem 'MXMENU.ZIP'
  5662.     
  5663.     See Also: ComSendXmodem
  5664.     
  5665.     Category: Modem
  5666.     
  5667.     
  5668.      ComRecYmodem
  5669.     
  5670.     Receive files by Ymodem protocol.
  5671.     
  5672.      Example:
  5673.        ComRecYmodem
  5674.     
  5675.     See Also: ComSendYmodem
  5676.     
  5677.     Category: Modem
  5678.     
  5679.     
  5680.      ComRecYmodemG
  5681.     
  5682.     Receive files by YmodemG protocol.
  5683.     
  5684.      Example:
  5685.        ComRecYmodemG
  5686.     
  5687.     See Also: ComSendYmodemG
  5688.     
  5689.     Category: Modem
  5690.     
  5691.     
  5692.      ComRecZmodem
  5693.     
  5694.     Receive files by Zmodem protocol.
  5695.     
  5696.      Example:
  5697.        ComRecZmodem
  5698.     
  5699.     See Also: ComSendZmodem
  5700.     
  5701.     Category: Modem
  5702.     
  5703.  
  5704.     Computer Tyme * MarxMenu * Users Manual                 Page #91
  5705.     -----------------------------------------------------------------
  5706.     
  5707.      ComResult : Number
  5708.     
  5709.     ComResult is a variable like FileResult that returns the success status
  5710.     of Com port activity. A result code or zero generally indicates success.
  5711.     
  5712.      Example:
  5713.        ComRecZmodem
  5714.        if ComResult <> 0 then Writeln 'Xfer Not Successful!'
  5715.     
  5716.     Category: Modem
  5717.     
  5718.     
  5719.      ComRI : Boolean
  5720.     
  5721.     Returns the status of the ring indicator line on serial ports.
  5722.     
  5723.      Example:
  5724.        if ComRI then Writeln 'Ringing'
  5725.     
  5726.     Category: Modem
  5727.     
  5728.     
  5729.      ComRTS (On/Off)
  5730.     
  5731.     Turns RTS (Request to Send) on and off.
  5732.     
  5733.      Example:
  5734.        ComRTS On
  5735.     
  5736.     Category: Modem
  5737.     
  5738.     
  5739.      ComSendBreak
  5740.     
  5741.     Sends a break signal out the modem.
  5742.     
  5743.     See Also: ComBreakReceived
  5744.     
  5745.     Category: Modem
  5746.     
  5747.     
  5748.      ComSend1kXmodem (FileName)
  5749.     
  5750.     Send a file by 1k Xmodem protocol.
  5751.     
  5752.      Example:
  5753.        ComSend1kXmodem 'MXMENU.ZIP'
  5754.     
  5755.     See Also: ComRec1kXmodem
  5756.     
  5757.     Category: Modem
  5758.     
  5759.  
  5760.     Computer Tyme * MarxMenu * Users Manual                 Page #92
  5761.     -----------------------------------------------------------------
  5762.     
  5763.      ComSendKermit (FileName or Array)
  5764.     
  5765.     Send files by Kermit protocol. If you pass a file name then it sends
  5766.     that file. If you pass it an array then it will send all the files in
  5767.     that array.
  5768.     
  5769.      Example:
  5770.        ComSendKermit 'MXMENU.ZIP'
  5771.     
  5772.      Example:
  5773.        AppendArray(FileList,'FILE1')
  5774.        AppendArray(FileList,'FILE2')
  5775.        ComSendKermit FileList
  5776.     
  5777.     See Also: ComRecKermit
  5778.     
  5779.     Category: Modem
  5780.     
  5781.     
  5782.      ComSendXmodem (FileName)
  5783.     
  5784.     Send a file by Xmodem protocol.
  5785.     
  5786.      Example:
  5787.        ComSendXmodem 'MXMENU.ZIP'
  5788.     
  5789.     See Also: ComRecXmodem
  5790.     
  5791.     Category: Modem
  5792.     
  5793.     
  5794.      ComSendYmodem (FileName or Array)
  5795.     
  5796.     Send files by Ymodem protocol. If you pass a file name then it sends
  5797.     that file. If you pass it an array then it will send all the files in
  5798.     that array.
  5799.     
  5800.      Example:
  5801.        ComSendYmodem 'MXMENU.ZIP'
  5802.     
  5803.      Example:
  5804.        AppendArray(FileList,'FILE1')
  5805.        AppendArray(FileList,'FILE2')
  5806.        ComSendYmodem FileList
  5807.     
  5808.     See Also: ComRecYmodem
  5809.     
  5810.     Category: Modem
  5811.     
  5812.  
  5813.     Computer Tyme * MarxMenu * Users Manual                 Page #93
  5814.     -----------------------------------------------------------------
  5815.     
  5816.      ComSendYmodemG (FileName or Array)
  5817.     
  5818.     Send files by YmodemG protocol. If you pass a file name then it sends
  5819.     that file. If you pass it an array then it will send all the files in
  5820.     that array.
  5821.     
  5822.      Example:
  5823.        ComSendYmodemG 'MXMENU.ZIP'
  5824.     
  5825.      Example:
  5826.        AppendArray(FileList,'FILE1')
  5827.        AppendArray(FileList,'FILE2')
  5828.        ComSendYmodemG FileList
  5829.     
  5830.     See Also: ComRecYmodemG
  5831.     
  5832.     Category: Modem
  5833.     
  5834.     
  5835.      ComSendZmodem (FileName or Array)
  5836.     
  5837.     Send files by Zmodem protocol. If you pass a file name then it sends
  5838.     that file. If you pass it an array then it will send all the files in
  5839.     that array.
  5840.     
  5841.      Example:
  5842.        ComSendZmodem 'MXMENU.ZIP'
  5843.     
  5844.      Example:
  5845.        AppendArray(FileList,'FILE1')
  5846.        AppendArray(FileList,'FILE2')
  5847.        ComSendZmodem FileList
  5848.     
  5849.     See Also: ComRecZmodem
  5850.     
  5851.     Category: Modem
  5852.     
  5853.     
  5854.      ComStopBits : Number
  5855.     
  5856.     Reads or sets the number of stop bits. Range 1 - 2 bits.
  5857.     
  5858.      Example:
  5859.        ComStopBits = 1
  5860.        Writeln ComStopBits
  5861.     
  5862.     See Also: ComBaud ComDataBits ComParity
  5863.     
  5864.     Category: Modem
  5865.     
  5866.  
  5867.     Computer Tyme * MarxMenu * Users Manual                 Page #94
  5868.     -----------------------------------------------------------------
  5869.     
  5870.      ComStripHighBit (on/off)
  5871.     
  5872.     This command when set to on (true), will automatically remove the
  5873.     high-order bit when using the ComReadChar command. File transfers and
  5874.     the ComReadLn command are unaffected by this command.
  5875.     
  5876.     See Also: ComReadChar
  5877.     
  5878.     Category: Modem
  5879.     
  5880.     
  5881.      ComThisLine : String
  5882.     
  5883.     ComThisLine returns a string of characters that has been received from
  5884.     the com port since the last CR. This can be used to see what prompts are
  5885.     being received for automatic script processing.
  5886.     
  5887.      Example:
  5888.        if pos('Password',ComThisLine) > 0
  5889.           ComWriteln 'Beast'
  5890.        endif
  5891.     
  5892.     Category: Modem
  5893.     
  5894.     
  5895.      ComTimeout : Boolean
  5896.     
  5897.     ComTimeout is set to True if the last command ended in a timeout error.
  5898.     
  5899.      Example:
  5900.        if ComTimeout then Writeln 'Something is stuck!'
  5901.     
  5902.     Category: Modem
  5903.     
  5904.     
  5905.      ComTotalErrors : Number
  5906.     
  5907.     During an upload or download ComTotalErrors returns the number of
  5908.     errors that occurred during the current file transfer.
  5909.     
  5910.     See Also: ComXmitStatusProgram
  5911.     
  5912.     Category: Modem
  5913.     
  5914.     
  5915.      ComUseInt14
  5916.     
  5917.     ComUseInt14 sets MarxMenu to talk to the ports through the Int14 serial
  5918.     port routines. This can be used for network modem sharing applications
  5919.     or if for some reason you don't want to talk to the UART directly. The
  5920.     default Int14 routines are unbuffered.
  5921.     
  5922.  
  5923.     Computer Tyme * MarxMenu * Users Manual                 Page #95
  5924.     -----------------------------------------------------------------
  5925.     
  5926.     Because of the limitations of the Int14 routines many of the more
  5927.     advance MarxMenu communications commands do nothing when this option is
  5928.     activated.
  5929.     
  5930.     Category: Modem
  5931.     
  5932.     
  5933.      ComUseUart
  5934.     
  5935.     ComUseUart sets MarxMenu to talk to the UART directly. This is the
  5936.     default mode. This command can be used to switch back if you used the
  5937.     ComUseInt14 command.
  5938.     
  5939.     Category: Modem
  5940.     
  5941.     
  5942.      ComWatchCD : Boolean
  5943.     
  5944.     When ComWatchCD is set to true MarxMenu watches the carrier detect
  5945.     signal. If carrier detect is lost then several things happen. ComCDAbort
  5946.     is set to true. ComEchoSendChar and ComEchoRecChar are set to false.
  5947.     ComWrite and ComWriteln are disabled. ComCharReady is always true and
  5948.     ComReadChar returns a char 0 when read.
  5949.     
  5950.     This function is there to reset a host program without having to build
  5951.     in a lot of error checking into the MarxMenu script. Setting ComWatchCD
  5952.     to false resets everything and allows you to prepare for the next call.
  5953.     
  5954.     Only set ComWatchCD to true after you receive a carrier detect signal.
  5955.     It is also recommended that you insert a half second delay after
  5956.     receiving a connect to deal with slow modems in fast computers.
  5957.     
  5958.     Category: Modem
  5959.     
  5960.     
  5961.      ComWrite (String)
  5962.     
  5963.     Writes a string to the com port with no CR.
  5964.     
  5965.      Example:
  5966.        ComWrite '+++'
  5967.     
  5968.     See Also: ComWriteln ComWriteTimeout
  5969.     
  5970.     Category: Modem
  5971.     
  5972.  
  5973.     Computer Tyme * MarxMenu * Users Manual                 Page #96
  5974.     -----------------------------------------------------------------
  5975.     
  5976.      ComWriteln (String)
  5977.     
  5978.     Writes a string to the com port with CR.
  5979.     
  5980.      Example:
  5981.        ComWriteln 'ATDT 1-417-866-1665'
  5982.     
  5983.     See Also: ComWrite ComWriteTimeout
  5984.     
  5985.     Category: Modem
  5986.     
  5987.     
  5988.      ComWriteTimeout : Number
  5989.     
  5990.     This variable controls the number of timer ticks (18.2 ticks per second)
  5991.     that a write command will wait to send data.
  5992.     
  5993.      Example:
  5994.         ComWriteTimeout = 36  ;2 seconds
  5995.     
  5996.     Category: Modem
  5997.     
  5998.     
  5999.      ComXmitAbortProgram
  6000.     
  6001.     ComXmitAbortProgram is called while uploads and downloads are in
  6002.     progress. If this is set to a MarxMenu procedure then you can write your
  6003.     own control routine to control protocol abort. Your program needs to
  6004.     return either a True to abort or a False to not abort.
  6005.     
  6006.      Example:
  6007.        ComXmitAbortProgram = loc XmitAbort
  6008.     
  6009.        Procedure XmitAbort
  6010.           if not KbdReady then Return False
  6011.           Return ReadKey = Esc
  6012.        EndProc
  6013.     
  6014.     See Also: ComXmitStatusProgram
  6015.     
  6016.     Category: Modem
  6017.     
  6018.     
  6019.      ComXmitEnding : Boolean
  6020.     
  6021.     This variable is set to True to indicate the endin for an upload or
  6022.     download. It is used to end a communications status window.
  6023.     
  6024.     See Also: ComXmitStatusProgram ComXmitStarting
  6025.     
  6026.     Category: Modem
  6027.     
  6028.  
  6029.     Computer Tyme * MarxMenu * Users Manual                 Page #97
  6030.     -----------------------------------------------------------------
  6031.     
  6032.      ComXmitStarting : Boolean
  6033.     
  6034.     This variable is set to True to indicate the beginning for an upload or
  6035.     download. It is used to start a communications status window.
  6036.     
  6037.     See Also: ComXmitStatusProgram ComXmitEnding
  6038.     
  6039.     Category: Modem
  6040.     
  6041.     
  6042.      ComXmitStatusProgram
  6043.     
  6044.     ComXmitStatusProgram is called while uploads and downloads are in
  6045.     progress. If this is set to a MarxMenu procedure then you can write your
  6046.     own status display routine to show progress status.
  6047.     
  6048.     See Also: ComXmitAbortProgram
  6049.     
  6050.     Category: Modem
  6051.     
  6052.     
  6053.      Comment
  6054.     
  6055.     Starts a Comment Block. All text is ignored until EndComment is
  6056.     encountered.
  6057.     
  6058.      Example:
  6059.        Comment
  6060.        =======================================
  6061.     
  6062.        Everything between Comment and EndComment is ignored.
  6063.     
  6064.        =======================================
  6065.        EndComment
  6066.     
  6067.     See Also: EndComment
  6068.     
  6069.     Category: Misc
  6070.     
  6071.     
  6072.      Console (On/Off)
  6073.     
  6074.     MarxMenu has an built-in system control console that the user can
  6075.     activate by pressing the <Tab> key.  This allows them to dynamically
  6076.     set the screen blanker parameters.  The command "CONSOLE OFF" will
  6077.     disable the <Tab> key function to prevent access console control box.
  6078.     
  6079.     Category: Display
  6080.     
  6081.  
  6082.     Computer Tyme * MarxMenu * Users Manual                 Page #98
  6083.     -----------------------------------------------------------------
  6084.     
  6085.      ConsoleBorderColor (Color,Color)
  6086.     
  6087.     Sets the color of the console border.
  6088.     
  6089.     See Also: ConsolePos
  6090.     
  6091.     Category: Color
  6092.     
  6093.     
  6094.      ConsoleHeaderColor (Color,Color)
  6095.     
  6096.     Sets the color of the console header.
  6097.     
  6098.     See Also: ConsolePos
  6099.     
  6100.     Category: Color
  6101.     
  6102.     
  6103.      ConsoleInsideColor (Color,Color)
  6104.     
  6105.     Sets the color of the console inside.
  6106.     
  6107.     See Also: ConsolePos
  6108.     
  6109.     Category: Color
  6110.     
  6111.     
  6112.      ConsolePos (column,row)
  6113.     
  6114.     Sets the coordinates of the pop-up console menu.
  6115.     
  6116.      Example:
  6117.        ConsoleBorderColor( White,Blue )
  6118.        ConsoleHeaderColor( Yellow,Blue )
  6119.        ConsoleInsideColor( Yellow,Blue )
  6120.        ConsolePos( 5,5 )               ; Column 5, Row 5
  6121.     
  6122.     Category: Display
  6123.     
  6124.     
  6125.      Const
  6126.     
  6127.     Creates a constant.
  6128.     
  6129.      Example:
  6130.        Const
  6131.          X = 50
  6132.          St = 'MARXMENU'
  6133.          Flag = True
  6134.     
  6135.     See Also: Var Shared Qualifier
  6136.     
  6137.  
  6138.     Computer Tyme * MarxMenu * Users Manual                 Page #99
  6139.     -----------------------------------------------------------------
  6140.     
  6141.     Category Variable
  6142.     
  6143.     
  6144.      Cos (Radians) : Real
  6145.     
  6146.     Returns the Cosine of a real.
  6147.     
  6148.     Category: Math Float
  6149.     
  6150.     
  6151.      CpuClass : Number
  6152.     
  6153.     Reads the type of CPU you are using and returns a number.
  6154.     
  6155.      1 - 8088, 8086, 80186, V20, V30
  6156.      2 - 80286
  6157.      3 - 80386
  6158.      4 - 80486
  6159.     
  6160.      Example:
  6161.        var Temp
  6162.        Temp = CPUClass   ;<- Read CPu Type into Var Temp
  6163.        if temp=1
  6164.             writeln "This System is an XT Class Machine!"
  6165.        elseif Temp=2
  6166.             writeln "This System is an AT Class Machine!"
  6167.        elseif Temp=3
  6168.             writeln "That 386 is a powerful machine."
  6169.        else
  6170.             writeln "Do you really rate having a 486?"
  6171.        endif
  6172.     
  6173.     Category: System
  6174.     
  6175.     
  6176.      CountryCode : Number
  6177.     
  6178.     Returns the international country code from DOS. The country code is the
  6179.     same number as the international telephone dialing code prefix.
  6180.     
  6181.     Category: International
  6182.     
  6183.     
  6184.      CurrencySymbol : String
  6185.     
  6186.     Returns the currency symbol based on the country code.
  6187.     
  6188.     Category: International
  6189.     
  6190.  
  6191.     Computer Tyme * MarxMenu * Users Manual                 Page #100
  6192.     -----------------------------------------------------------------
  6193.     
  6194.      CurrentEnvironment
  6195.     
  6196.     CurrentEnvironment selects the current environment for use with
  6197.     environment access commands.
  6198.     
  6199.     See Also: ReadEnv SetEnv ReadEnvironment ShellEnvironment
  6200.     See Also: ParentEnvironment MasterEnvironment
  6201.     
  6202.     Category: Environment
  6203.     
  6204.     
  6205.      CurrentWindow : Number
  6206.     
  6207.     Returns the number of the current window. All windows are given a unique
  6208.     number.
  6209.     
  6210.      Example:
  6211.        ThisWindow = CurrentWindow
  6212.     
  6213.     See Also: SetTopWindow
  6214.     
  6215.     Category: Display
  6216.     
  6217.     
  6218.      Cursor (On/Off)
  6219.     
  6220.     MarxMenu automatically turns the cursor on for certain kinds of input.
  6221.     Using Cursor Off prevents MarxMenu from turning the cursor on. Cursor On
  6222.     reverses this and allows MarxMenu to turn the cursor on when needed.
  6223.     
  6224.      Example:
  6225.        Cursor Off
  6226.     
  6227.     Category: Display
  6228.     
  6229.     
  6230.      CustomBox (String)
  6231.     
  6232.     Selects a Box border using an 8 character string to define the sides and
  6233.     the corners.
  6234.     
  6235.      Example:
  6236.        CustomBox ('12345678') ;This will help you figure out what
  6237.                               ;position matches which side.
  6238.     
  6239.     See Also: SingleLineBox DoubleLineBox BlockBox NoBoxBorder
  6240.     
  6241.     Category: Display
  6242.     
  6243.  
  6244.     Computer Tyme * MarxMenu * Users Manual                 Page #101
  6245.     -----------------------------------------------------------------
  6246.     
  6247.      DateSeparator : String
  6248.     
  6249.     Returns the date separator character from the country information.
  6250.     
  6251.     See Also: TimeSeparator DecimalSeparator CountryCode
  6252.     
  6253.     Category: International Time
  6254.     
  6255.     
  6256.      DateString (Time) : String
  6257.     
  6258.     Returns the date of a time value as text. If no parameter is passed then
  6259.     Now is assumed. Uses international date format rules.
  6260.     
  6261.      Example:
  6262.        Writeln DateString            ;returns the date of Now as text
  6263.        Writeln DateString (Tomorrow) ;returns the date of Tomorrow as text
  6264.     
  6265.     Category: Time String International
  6266.     
  6267.     
  6268.      Day : Number
  6269.     
  6270.     Returns the day of the month.
  6271.     
  6272.     Category: Time
  6273.     
  6274.     
  6275.      DayOf (Date) : Number
  6276.     
  6277.     Returns the day of a date. If Date is passed as a string it is
  6278.     converted automatically.
  6279.     
  6280.      Example:
  6281.        DayOf('April 22, 1992')  ;returns 22
  6282.     
  6283.     See Also: TimeOf BadDate
  6284.     
  6285.     Category: Time
  6286.     
  6287.     
  6288.      DayOfWeek : Number
  6289.     
  6290.     Returns the day of the week.
  6291.     
  6292.       0=SUNDAY
  6293.       1=MONDAY
  6294.       2=TUESDAY
  6295.       3=WEDNESDAY
  6296.       4=THURSDAY
  6297.       5=FRIDAY
  6298.       6=SATURDAY
  6299.     
  6300.  
  6301.     Computer Tyme * MarxMenu * Users Manual                 Page #102
  6302.     -----------------------------------------------------------------
  6303.     
  6304.     Category: Time
  6305.     
  6306.     
  6307.      DayOfWeekOf (Date) : Number
  6308.     
  6309.     Returns the DayOfWeek of a date. If Date is passed as a string it is
  6310.     converted automatically.
  6311.     
  6312.      Example:
  6313.        DayOfWeekOf('April 22, 1992')  ;returns 4
  6314.     
  6315.     See Also: TimeOf BadDate
  6316.     
  6317.     Category: Time
  6318.     
  6319.     
  6320.      DecimalSeparator : String
  6321.     
  6322.     Returns the decimal separator character from the country information.
  6323.     
  6324.     See Also: TimeSeparator DateSeparator CountryCode
  6325.     
  6326.     Category: International
  6327.     
  6328.     
  6329.      Delete (string,pos,count)
  6330.     
  6331.     Deletes characters from string starting at pos for count.
  6332.     
  6333.      Example:
  6334.        String = 'ABCDEFGH'
  6335.        Delete(String,2,3)
  6336.     
  6337.     This leaves a String containing 'AEFGH'
  6338.     
  6339.     If count exceeds the length of the string, the string is truncated at
  6340.     pos.
  6341.     
  6342.     Another use of Delete is to delete elements of an array.
  6343.     
  6344.     Delete (Array,Position,Count)
  6345.     This works exactly like the delete command for strings. It delete
  6346.     elements of an array beginning at Position for Count elements. The
  6347.     NumberOfElements is adjusted accordingly.
  6348.     
  6349.      Example:
  6350.        MyArray[1] = "ONE"
  6351.        MyArray[2] = "TWO"
  6352.        MyArray[3] = "THREE"
  6353.        MyArray[4] = "FOUR"
  6354.        Delete( MyArray,2,2 )
  6355.     
  6356.  
  6357.     Computer Tyme * MarxMenu * Users Manual                 Page #103
  6358.     -----------------------------------------------------------------
  6359.     
  6360.      ;MyArray now contains..
  6361.        MyArray[1] = "ONE"
  6362.        MyArray[2] = "FOUR"
  6363.     
  6364.     Category: String Array
  6365.     
  6366.     
  6367.      DelFile (Name)
  6368.     
  6369.     Deletes a file by name. FileResult returns a 0 if the file existed and
  6370.     the delete was successful.
  6371.     
  6372.      Example:
  6373.        DelFile( 'C:\NOTES\READ.ME' )
  6374.        If FileResult = 0
  6375.          Writeln('C:\NOTES\READ.ME was successfully deleted!')
  6376.        Else
  6377.          Writeln('C:\NOTES\READ.ME was NOT deleted successfully!')
  6378.        EndIf
  6379.     
  6380.     Category: File
  6381.     
  6382.     
  6383.      Devices (Array)
  6384.     
  6385.     Fills array with list of all devices.
  6386.     
  6387.      Example:
  6388.        var temp
  6389.        devices(temp)                   ;Device list --> array temp
  6390.        loop temp                       ;Loop thru the array
  6391.             writeln temp[loopindex]    ;And Print contents
  6392.        endloop
  6393.     
  6394.     Category: Array
  6395.     
  6396.     
  6397.      DirectoriesOnly (On/Off)
  6398.     
  6399.     Forces ReadDirectory to read directories instead of file names.
  6400.     
  6401.     See Also: ReadDirectory
  6402.     
  6403.     Category: Directory
  6404.     
  6405.     
  6406.      DisplayType : Number
  6407.     
  6408.     Returns the current video card type.
  6409.     
  6410.      0 = HercMono
  6411.      1 = CGA
  6412.      2 = MCGA
  6413.      3 = EGA
  6414.      4 = VGA
  6415.      5 = PGC
  6416.     
  6417.  
  6418.     Computer Tyme * MarxMenu * Users Manual                 Page #104
  6419.     -----------------------------------------------------------------
  6420.     
  6421.     MarxMenu also understands the above constant names. For example, if you
  6422.     want to test for a CGA card:
  6423.     
  6424.      if DisplayType = CGA then ....
  6425.     
  6426.     Category: Display
  6427.     
  6428.     
  6429.      DiskType (Drive) : String
  6430.     
  6431.     DiskType returns the type of disk of a drive letter. Types recognized
  6432.     are:
  6433.     
  6434.      FLOPPY360
  6435.      FLOPPY720
  6436.      FLOPPY12
  6437.      FLOPPY14
  6438.      RAMDISK
  6439.      SUBST
  6440.      HARDDISK
  6441.      BERNOULI
  6442.      NOVELL
  6443.      UNKNOWN
  6444.     
  6445.      Example
  6446.      Writeln DiskType('F')
  6447.     
  6448.     Category: System
  6449.     
  6450.     
  6451.      Dispose (Variable)
  6452.     
  6453.     This command reclaims memory used by a string variable, file variable,
  6454.     or an array. If you are doing a lot of data manipulation, you might want
  6455.     to reclaim memory space used by arrays you are done with. The disposed
  6456.     variable becomes an untyped variable.
  6457.     
  6458.      Example:
  6459.        Loop( 20 )
  6460.          MyArray[LoopIndex] = LoopIndex
  6461.     
  6462.          ;Check to See Also: if number is odd or even
  6463.          If (MyArray[LoopIndex] Mod 2) = 0
  6464.            Writeln('MyArray[' + Str(LoopIndex) + '] is an EVEN number.' );
  6465.          Else
  6466.            Writeln('MyArray[' + Str(LoopIndex) + '] is an EVEN number.' );
  6467.          EndIf
  6468.        EndLoop
  6469.     
  6470.        ;We're finished with the array so reclaim its memory space.
  6471.        Dispose(MyArray)
  6472.     
  6473.  
  6474.     Computer Tyme * MarxMenu * Users Manual                 Page #105
  6475.     -----------------------------------------------------------------
  6476.     
  6477.     Category: Memory Array
  6478.     
  6479.     
  6480.      DosVersion : Number
  6481.     
  6482.     Returns the major DOS version number.
  6483.     
  6484.     See Also: DosVersionString MinorDosVersion
  6485.     
  6486.     Category: System
  6487.     
  6488.     
  6489.      DosVersionString : String
  6490.     
  6491.     Returns the DOS version number as a 4 character string. This function
  6492.     always returns 2 places past the decimal point. The form of the string
  6493.     is: #.##
  6494.     
  6495.      Example
  6496.         Writeln DosVersionString   ;prints 4.01
  6497.     
  6498.     See Also: DosVersion MinorDosVersion
  6499.     
  6500.     Category: System String
  6501.     
  6502.     
  6503.      DosWindow (on/off)
  6504.     
  6505.     When you set DosWindow on, MarxMenu will not drop out of the menu system
  6506.     when you use the Execute command. It will give you a display of the DOS
  6507.     screen within the current window. The program you execute must be a
  6508.     well-behaved program like DIR or COPY or some of the other DOS commands
  6509.     that talk to the screen through standard file handles.
  6510.     
  6511.     See Also: Execute
  6512.     
  6513.     Category: Execution
  6514.     
  6515.     
  6516.      DoubleLineBox
  6517.     
  6518.     Selects double line box.
  6519.     
  6520.     See Also: SingleLineBox BlockBox CustomBox NoBoxBorder
  6521.     
  6522.     Category: Display
  6523.     
  6524.  
  6525.     Computer Tyme * MarxMenu * Users Manual                 Page #106
  6526.     -----------------------------------------------------------------
  6527.     
  6528.      DrawBox (column,row,width,height)
  6529.     
  6530.     Draws a box on the screen. The (column) and (row) are the upper left
  6531.     corner, (width) and (height) is the box size.
  6532.     
  6533.      Example:
  6534.        Explode On
  6535.        Shadow On
  6536.        DoubleLineBox
  6537.        BoxHeaderColor( Yellow,Red )
  6538.        BoxBorderColor( White, Red )
  6539.        BoxInsideColor( Yellow,Red )
  6540.        InverseColor( Black, Gray )
  6541.        CapsColor( Black, Red )
  6542.        BoxHeader = ' << Main Menu >> '
  6543.        DrawBox( 30,10,40,8 )
  6544.     
  6545.     DrawBox also creates a logical layer for several display variables.
  6546.     These variables include TextColor, InverseColor, CapsColor. It is
  6547.     important to use these color control commands AFTER the DrawBox command
  6548.     in order to properly restore the colors of the previous DrawBox.
  6549.     
  6550.     If you call up a box and when it finishes it messes up the colors of the
  6551.     previous box, you probably used color control commands BEFORE the
  6552.     DrawBox instead of AFTER.
  6553.     
  6554.     Category: Display
  6555.     
  6556.     
  6557.      Drives : Number
  6558.     
  6559.     Returns the number of drives. This includes drive names that can be
  6560.     substituted. Most of the time the answer is 5. This relates to your
  6561.     LastDrive = command in your CONFIG.SYS file.
  6562.     
  6563.     Category: System
  6564.     
  6565.     
  6566.      DvAppNumber : Number
  6567.     
  6568.     Returns the DesqView application number or DesqView window number.
  6569.     
  6570.     Category: DesqView
  6571.     
  6572.     
  6573.      DvFrame (Handle,On/Off)
  6574.     
  6575.     Turns the DesqView border frame on or off for a particular task
  6576.     identified by Handle.
  6577.     
  6578.     Category: DesqView
  6579.     
  6580.  
  6581.     Computer Tyme * MarxMenu * Users Manual                 Page #107
  6582.     -----------------------------------------------------------------
  6583.     
  6584.      DvFreeze (Handle)
  6585.     
  6586.     Freezes a program. The program stops executing.
  6587.     
  6588.     See Also: DvUnFreeze DvPifExecute DvLastHandle
  6589.     
  6590.     Category: DesqView
  6591.     
  6592.     
  6593.      DvHide (Handle)
  6594.     
  6595.     Hides all output from program making it invisible. The program still
  6596.     continues to run.
  6597.     
  6598.     See Also: DvUnHide
  6599.     
  6600.     Category: DesqView
  6601.     
  6602.     
  6603.      DvKillTask (Handle)
  6604.     
  6605.     Kills a program running under DesqView. The handle is the one returned
  6606.     be DvPifExecute in DvLastHandle.
  6607.     
  6608.     See Also: DvPifExecute
  6609.     
  6610.     Category: DesqView
  6611.     
  6612.     
  6613.      DvLastHandle : Number
  6614.     
  6615.     Returns a number that is associated with a program running under
  6616.     DesqView. This number is used to control other programs running under
  6617.     DesqView. It is set by DvPifExecute.
  6618.     
  6619.     See Also: DvPifExecute
  6620.     
  6621.     Category: DesqView
  6622.     
  6623.     
  6624.      DvLoaded : Boolean
  6625.     
  6626.     Returns true if DesqView is loaded.
  6627.     
  6628.     Category: DesqView
  6629.     
  6630.     
  6631.      DvMoveWindow (Handle,X,Y)
  6632.     
  6633.     Moves DesqView window upper left corner to position X,Y.
  6634.     
  6635.     Category: DesqView
  6636.     
  6637.  
  6638.     Computer Tyme * MarxMenu * Users Manual                 Page #108
  6639.     -----------------------------------------------------------------
  6640.     
  6641.      DvMyHandle : Number
  6642.     
  6643.     Returns the DesqView handle of the current process.
  6644.     
  6645.     See Also: DvLastHandle
  6646.     
  6647.     Category: DesqView
  6648.     
  6649.     
  6650.      DvPifExecute (Pif File)
  6651.     
  6652.     Executes another program under DesqView in another window. MarxMenu
  6653.     stays resident in its original window. The window executes according to
  6654.     the contents of the DesqView PIF file. The PIF file can be specified by
  6655.     using the full name. If you leave off the extension, MarxMenu assumes
  6656.     the extension DVP. If you pass a two-character name, like the two
  6657.     characters in the DesqView menus, then MarxMenu will add -PIF.DVP to the
  6658.     name. If the PIF file is on the path, MarxMenu will find it.
  6659.     
  6660.     Warning! DesqView must be loaded to run this command.
  6661.     
  6662.      Example:
  6663.        DvPifExecute 'BD'
  6664.        DvPifExecute 'BD-PIF'       ;These all execute Big DOS
  6665.        DVPifExecute 'BD-PIF.DVP'
  6666.     
  6667.     The task handle is loaded into a variable named DvLastHandle. When the
  6668.     program starts, it becomes the current top program.
  6669.     
  6670.     See Also: DvLoaded DvLastHandle
  6671.     
  6672.     Category: DesqView
  6673.     
  6674.     
  6675.      DvResizeWindow (Handle,Width,Height)
  6676.     
  6677.     Changes the size of a DesqView window.
  6678.     
  6679.     Category: DesqView
  6680.     
  6681.     
  6682.      DvSetBottom (Handle)
  6683.     
  6684.     Sets the program associated with the handle to the bottom of the task
  6685.     stack.
  6686.     
  6687.     See Also: DvSetTop
  6688.     
  6689.     Category: DesqView
  6690.     
  6691.  
  6692.     Computer Tyme * MarxMenu * Users Manual                 Page #109
  6693.     -----------------------------------------------------------------
  6694.     
  6695.      DvSetTop (Handle)
  6696.     
  6697.     Sets the program associated with the handle to be the top running task.
  6698.     Using DvMyHandle allows MarxMenu to regain control after starting
  6699.     another task.
  6700.     
  6701.      Example:
  6702.         DvSetTop (DvMyHandle)
  6703.     
  6704.     See Also: DvSetBottom DvLastHandle
  6705.     
  6706.     Category: DesqView
  6707.     
  6708.     
  6709.      DvUnFreeze (Handle)
  6710.     
  6711.     UnFreezes a program. The program starts executing again.
  6712.     
  6713.     See Also: DvFreeze DvPifExecute DvLastHandle
  6714.     
  6715.     Category: DesqView
  6716.     
  6717.     
  6718.      DvUnHide (Handle)
  6719.     
  6720.     Reverses the effect of DvHide making program output visible again.
  6721.     
  6722.     See Also: DvHide
  6723.     
  6724.     Category: DesqView
  6725.     
  6726.     
  6727.      Else
  6728.     
  6729.     Starts lines executed if a condition is not true.
  6730.     
  6731.      Example:
  6732.        if X = 1
  6733.           Writeln 'One'
  6734.        else
  6735.           Writeln 'Not One'
  6736.        endif
  6737.     
  6738.     See Also: If Then Endif ElseIf
  6739.     
  6740.     Category: Conditional
  6741.     
  6742.  
  6743.     Computer Tyme * MarxMenu * Users Manual                 Page #110
  6744.     -----------------------------------------------------------------
  6745.     
  6746.      ElseIf
  6747.     
  6748.     Used with IF, ELSE, and ENDIF in conditional statements. After one
  6749.     ElseIf is true, execution continues after the endif statement.
  6750.     
  6751.      Example:
  6752.        if X = 1
  6753.           Writeln 'One'
  6754.     
  6755.        elseif X = 2
  6756.           Writeln 'Two'
  6757.     
  6758.        elseif X = 3
  6759.           Writeln 'Three'
  6760.     
  6761.        elseif X = 4
  6762.           Writeln 'Four'
  6763.     
  6764.        else
  6765.           Writeln 'Other'
  6766.     
  6767.        endif
  6768.     
  6769.     See Also: If Then Endif Else
  6770.     
  6771.     Category: Conditional
  6772.     
  6773.     
  6774.      EndComment
  6775.     
  6776.     Ends a comment block.
  6777.     
  6778.      Example:
  6779.        Comment
  6780.        =======================================
  6781.     
  6782.        Everything between Comment and EndComment is ignored.
  6783.     
  6784.        =======================================
  6785.        EndComment
  6786.     
  6787.     See Also: Comment
  6788.     
  6789.     Category: Misc
  6790.     
  6791.  
  6792.     Computer Tyme * MarxMenu * Users Manual                 Page #111
  6793.     -----------------------------------------------------------------
  6794.     
  6795.      EndIf
  6796.     
  6797.     Ends an if statement.
  6798.     
  6799.      Example:
  6800.        writeln "EndIf Example"
  6801.        if DayOfWeekof(Today)=2                             ;Code Between IF
  6802.           Writeln 'This line will only print on Tuesdays'  ;and ENDIF will
  6803.        endif                                               ;run if cond=True
  6804.        writeln "This line will always execute"
  6805.     
  6806.     See Also: If Else ElseIf Then
  6807.     
  6808.     Category: Conditional
  6809.     
  6810.     
  6811.      EndLoop
  6812.     
  6813.     Ends a loop statement.
  6814.     
  6815.     See Also: Loop LoopIndex LoopLimit
  6816.     
  6817.     Category: Conditional
  6818.     
  6819.     
  6820.      EndOfFile (FileVar) : Boolean
  6821.     
  6822.     Returns True if you are at the end of the file.
  6823.     
  6824.      Example:
  6825.        Var In
  6826.     
  6827.        FileAssign (In,'C:\NOTES\READ.ME')
  6828.        FileOpen (In)
  6829.        While not EndOfFile (In)
  6830.           Writeln (FileReadLn (In))
  6831.        EndWhile
  6832.        FileClose (In)
  6833.     
  6834.     Category: File
  6835.     
  6836.     
  6837.      EndProc
  6838.     
  6839.     Ends a Procedure.
  6840.     
  6841.     See Also: Procedure Return
  6842.     
  6843.     Category: Misc
  6844.     
  6845.  
  6846.     Computer Tyme * MarxMenu * Users Manual                 Page #112
  6847.     -----------------------------------------------------------------
  6848.     
  6849.      EndWhile
  6850.     
  6851.     Ends a While statement.
  6852.     
  6853.     See Also: While
  6854.     
  6855.     Category: Conditional
  6856.     
  6857.     
  6858.      EnvFree : Number
  6859.     
  6860.     Returns the free space in the selected environment.
  6861.     
  6862.      Example:
  6863.        var temp
  6864.     
  6865.        temp=EnvFree     ;Read # of bytes of avail Env. Memory
  6866.        if temp<50
  6867.             writeln "WARNING: Environment Memory Critically LOW!!!"
  6868.        endif
  6869.     
  6870.     See Also: EnvSize
  6871.     
  6872.     Category: Environment
  6873.     
  6874.     
  6875.      EnvSize : Number
  6876.     
  6877.     Returns the size of the selected environment.
  6878.     
  6879.      Example:
  6880.        if EnvSize < 20
  6881.           Writeln ('Your environment size is less than 20 bytes!!')
  6882.        endif
  6883.     
  6884.     See Also: EnvFree
  6885.     
  6886.     Category: Environment
  6887.     
  6888.     
  6889.      EraseTopWindow
  6890.     
  6891.     Erases the last window created with DrawBox.
  6892.     
  6893.     See Also: EraseWindow
  6894.     
  6895.     Category: Display
  6896.     
  6897.  
  6898.     Computer Tyme * MarxMenu * Users Manual                 Page #113
  6899.     -----------------------------------------------------------------
  6900.     
  6901.      EraseWindow (Number)
  6902.     
  6903.     Erases a window by number. This allows you to erase a window that is not
  6904.     the top window.
  6905.     
  6906.     See Also: CurrentWindow SetTopWindow EraseTopWindow
  6907.     
  6908.     Category: Display
  6909.     
  6910.     
  6911.      Execute (command string)
  6912.     
  6913.     This allows you to execute a program without dropping out of MarxMenu.
  6914.     MarxMenu remains resident in memory and takes up approximately 50k. No
  6915.     batch file will be created by MarxMenu.
  6916.     
  6917.     This is handy if you have a small program you want to run from the menu
  6918.     but don't want to allow for the time required by MarxMenu to create and
  6919.     run a batch file. You can also execute some programs in a MarxMenu
  6920.     window (See Also: DosWindow). You can also execute a program and examine
  6921.     the return code.
  6922.     
  6923.     This command can be placed in a progression of menu commands without any
  6924.     special handling. Under an OnKey statement, you will need use a vertical
  6925.     bar in front of the command.
  6926.     
  6927.      Example:
  6928.        OnKey 'D'
  6929.         |UseCommand Off
  6930.         |Execute 'C:\DM.COM'  ;Note the COM extension is required here.
  6931.     
  6932.     Note: If UseCommand is True or On, MarxMenu will load COMMAND.COM to
  6933.     execute your command. If UseCommand is False, MarxMenu will execute your
  6934.     file directly without COMMAND.COM. Using COMMAND.COM will execute
  6935.     slightly slower, use 3.5k more RAM, and allow you to use command lines
  6936.     just like you would from the DOS prompt.
  6937.     
  6938.     If you set UseCommand to off, you will have to include the COM or EXE
  6939.     extension in the name. If you don't include the extension, MarxMenu will
  6940.     automatically override UseCommand and load the command processor. If the
  6941.     command processor is loaded then you won't be able to read the
  6942.     errorlevel return code from the program you are running.
  6943.     
  6944.     MarxMenu will also use COMMAND.COM if you are piping or redirecting
  6945.     output to a file. COMMAND.COM is required when running internal DOS
  6946.     commands like COPY or DIR. It is also required to run batch files.
  6947.     
  6948.     When UseCommand is off, MarxMenu will search the PATH for the executable
  6949.     file if it isn't in the current directory.
  6950.     
  6951.  
  6952.     Computer Tyme * MarxMenu * Users Manual                 Page #114
  6953.     -----------------------------------------------------------------
  6954.     
  6955.     Not using COMMAND.COM allows you to use the ReturnCode variable to get
  6956.     the ERRORLEVEL from the subprogram. If COMMAND.COM is loaded, the
  6957.     ERRORLEVEL of the subprogram is lost.
  6958.     
  6959.     The ClearScreenFirst (On/Off) controls whether MarxMenu will clear the
  6960.     screen before you execute.
  6961.     
  6962.     The PauseAfterExecute (On/Off) allows you to have a pause like the Pause
  6963.     command in batch files. That way you can read the screen before it
  6964.     restores the MarxMenu screen. MarxMenu will display "Press any key to
  6965.     return to MarxMenu."
  6966.     
  6967.     By setting DosWindow to True MarxMenu will allow some programs to
  6968.     execute with the display going to a MarxMenu window. For this to work
  6969.     the program must output it's text to the standard output device.
  6970.     Programs that write directly to the screen won't work with DosWindow.
  6971.     
  6972.     Be sure not to load any TSR programs using the Execute command or
  6973.     MarxMenu will lock up.
  6974.     
  6975.     See Also: UseCommand DosWindow PauseAfterExecute ClearScreenFirst
  6976.     
  6977.     Category: Execution
  6978.     
  6979.     
  6980.      ExistDir (directory) : Boolean
  6981.     
  6982.     Used to test whether or not a DIRECTORY exists. It can also test to see
  6983.     if a disk is inserted in a floppy drive or if a drive exists.
  6984.     
  6985.      Example:
  6986.        if not ExistDir 'A:' then Writeln 'Insert disk in drive A:'
  6987.     
  6988.     See Also: ExistFile
  6989.     
  6990.     Category: Directory
  6991.     
  6992.     
  6993.      ExistFile : Boolean
  6994.     
  6995.     Used to test whether or not a file or device exists.
  6996.     
  6997.      Example:
  6998.        ExistFile 'MARXMENU.EXE'
  6999.        ExistFile 'LPT2'            ;returns true if LPT2 device exists
  7000.     
  7001.     See Also: ExistDir
  7002.     
  7003.     Category: File
  7004.     
  7005.  
  7006.     Computer Tyme * MarxMenu * Users Manual                 Page #115
  7007.     -----------------------------------------------------------------
  7008.     
  7009.      ExistOnPath (string) : String
  7010.     
  7011.     Used to search the existing paths for the command to be executed by
  7012.     Execute or other function.
  7013.     
  7014.      Example:
  7015.        OnKey 'D'
  7016.        |Execute(ExistOnPath('DM.COM'))
  7017.     
  7018.     If the file is not found, a null string is returned.
  7019.     
  7020.     Category: File
  7021.     
  7022.     
  7023.      ExitCode
  7024.     
  7025.     This can be set so MarxMenu will return an ErrorLevel that can be used
  7026.     in a batch file.
  7027.     
  7028.      Example:
  7029.         ExitCode = 100
  7030.     
  7031.     When MarxMenu exits it will use ErrorLevel 100.
  7032.     
  7033.     Category: Execution
  7034.     
  7035.     
  7036.      ExitMenu
  7037.     
  7038.     Causes MarxMenu to exit. If the Bat command is used or batch commands
  7039.     are used under an OnKey statement then MarxMenu will create a batch file
  7040.     and set the environment variable MXCMD to point to it. If no batch file
  7041.     is to be created, and MXCMD hasn't been set to any value then the menu
  7042.     system will exit by setting MXCMD to MXSTOP.
  7043.     
  7044.     Category: Execution
  7045.     
  7046.     
  7047.      Exp (Real) : Real
  7048.     
  7049.     Returns the Exponential of a real. Inverse of Ln.
  7050.     
  7051.     Category: Math Float
  7052.     
  7053.     
  7054.      Explode (on/off)
  7055.     
  7056.     Turn exploding windows on/off.
  7057.     
  7058.     Category: Display
  7059.     
  7060.  
  7061.     Computer Tyme * MarxMenu * Users Manual                 Page #116
  7062.     -----------------------------------------------------------------
  7063.     
  7064.      ExplodeDelay (number)
  7065.     
  7066.     Sets the speed of exploding windows. Use this command to adjust the
  7067.     speed of the exploding windows. Default is 15.
  7068.     
  7069.     Category: Display
  7070.     
  7071.     
  7072.      Extension (String) : String
  7073.     
  7074.     Returns the Extension of a file name or sets the Extension.
  7075.     
  7076.      Example:
  7077.        Writeln Extension 'MARXMENU.EXE'  ;returns 'EXE'
  7078.     
  7079.      Example:
  7080.        var FileName
  7081.          FileName = 'TEST.MNU'
  7082.          Extension (FileName) = 'MRX'
  7083.          Writeln FileName        ;this returns 'TEST.MRX'
  7084.     
  7085.     See Also: NamePart PathPart FilePart
  7086.     
  7087.     Category: String
  7088.     
  7089.     
  7090.      FileAppend (FileVar)
  7091.     
  7092.     Opens a file for access and moves the file pointer to the end of the
  7093.     file. File writes will start at the end of the file.
  7094.     
  7095.      Example:
  7096.        var LogFileName
  7097.     
  7098.        FileAssign(LogFileName,'USER.LOG')  ; Assign a filename
  7099.        FileAppend(LogFileName)             ; Use FileAppend move to EOF
  7100.        FileWriteLn(LogFileName,"This is a test") ;Write to file
  7101.        FileClose(LogFileName)              ;Close File
  7102.     
  7103.     See Also: FileOpen
  7104.     
  7105.     Category: File
  7106.     
  7107.     
  7108.      FileAssign (FileVar,String)
  7109.     
  7110.     Assigns a file variable to a file name. Files must be given a name
  7111.     before they can be accessed.
  7112.     
  7113.      Example:
  7114.        FileAssign(BatFile,'MARX.BAT')
  7115.     
  7116.  
  7117.     Computer Tyme * MarxMenu * Users Manual                 Page #117
  7118.     -----------------------------------------------------------------
  7119.     
  7120.     BatFile is a variable and after the FileAssign, it becomes a file
  7121.     variable. All access to the file must be done using the file variable.
  7122.     
  7123.     If an empty string is passed as the file name, MarxMenu will use the
  7124.     standard console file handles.
  7125.     
  7126.     See Also: FileOpen
  7127.     
  7128.     Category: File
  7129.     
  7130.     
  7131.      FileAttr (string) : Number
  7132.     
  7133.     Returns the attribute of a file or directory.
  7134.     
  7135.      Example:
  7136.        ; ATTRDISP.MNU
  7137.        ; ATTRIBUTE BYTE DISPLAY PROGRAM
  7138.        ; Using the FileAttr command. USAGE: "MARXMENU ATTRDISP Filename"
  7139.        var temp
  7140.        temp=binstring(fileattr(cmdline),8)
  7141.        writeln "Menu FileName: " + cmdline + "       " + temp
  7142.        writeln " "
  7143.        if mid(temp,8,1)="1" then writeln "READ-ONLY FLAG SET"
  7144.        if mid(temp,7,1)="1" then writeln "HIDDEN FLAG SET"
  7145.        if mid(temp,6,1)="1" then writeln "SYSTEM FLAG SET"
  7146.        if mid(temp,3,1)="1" then writeln "ARCHIVE BIT SET"
  7147.     
  7148.     Category: File
  7149.     
  7150.     
  7151.      FileClose (FileVar)
  7152.     
  7153.     Closes a file and deallocates the memory space used by the file
  7154.     variable.
  7155.     
  7156.     See Also: FileOpen
  7157.     
  7158.     Category: File
  7159.     
  7160.     
  7161.      FileCreate (FileVar)
  7162.     
  7163.     Creates a new file. If the file exists, it overwrites the old one.
  7164.     FileCreate opens the file for output. Do not use FileOpen with
  7165.     FileCreate.
  7166.     
  7167.     See Also: FileWriteln
  7168.     
  7169.     Category: File
  7170.     
  7171.  
  7172.     Computer Tyme * MarxMenu * Users Manual                 Page #118
  7173.     -----------------------------------------------------------------
  7174.     
  7175.      FileDate (string) : Number
  7176.     
  7177.     Returns file date as 32 bit integer. See DOS manual for date structure.
  7178.     This function should not be confused with FileTime which is compatible
  7179.     with all other MarxMenu time commands.
  7180.     
  7181.     See Also: FileTime
  7182.     
  7183.     Category: File
  7184.     
  7185.     
  7186.      FileFlush (FileVar)
  7187.     
  7188.     Writes any information that is in the file buffers to disk.
  7189.     
  7190.     See Also: FileWriteln
  7191.     
  7192.     Category: File
  7193.     
  7194.     
  7195.      FileLog (FileName,String)
  7196.     
  7197.     FileLog opens the file if it exists, or creates it if it doesn't exist.
  7198.     It then seeks to the end of the file and writes the string to the end.
  7199.     The file is then closed. FileLog is typically used for things such as
  7200.     usage tracking.
  7201.     
  7202.      Example:
  7203.         FileLog('USAGE.LOG','Add This Line!')
  7204.     
  7205.     Category: File
  7206.     
  7207.     
  7208.      FileOpen (FileVar)
  7209.     
  7210.     Opens a file for access. FileOpen is not needed if you are using the
  7211.     ReadTextFile command. The following example copies a text file.
  7212.     
  7213.        var Inp Out St
  7214.     
  7215.        FileAssign(Inp,'INPUT.TXT')
  7216.        FileOpen(Inp)
  7217.        FileAssign(Out,'OUTPUT.TXT')
  7218.        FileCreate(Out)
  7219.        while not EndOfFile(Inp)
  7220.           St = FileReadln(Inp)
  7221.           FileWriteln(Out,St)
  7222.        endwhile
  7223.        FileClose(Inp)
  7224.        FileClose(Out)
  7225.     
  7226.  
  7227.     Computer Tyme * MarxMenu * Users Manual                 Page #119
  7228.     -----------------------------------------------------------------
  7229.     
  7230.     Category: File
  7231.     
  7232.     
  7233.      FilePart (String) : String
  7234.     
  7235.     Returns the file part of a file name.
  7236.     
  7237.      Example:
  7238.        NamePart ('C:\MARX\MARXMENU.EXE') ;returns MARXMENU.EXE
  7239.     
  7240.     See Also: Extension PathPart NamePart
  7241.     
  7242.     Category: String
  7243.     
  7244.     
  7245.      FilePos (FileVar) : Number
  7246.     
  7247.     Returns the current file position in bytes of where you are at in a file
  7248.     that you are reading or writing. You can get back to the same place in
  7249.     the file by using FileSeek.
  7250.     
  7251.     See Also: FileSeek
  7252.     
  7253.     Category: File
  7254.     
  7255.     
  7256.      FileReadln (FileVar) : String
  7257.     
  7258.     Reads one line of an open file returning that line as a string.
  7259.     
  7260.      Example:
  7261.        Line3 = FileReadln(BatFile)
  7262.     
  7263.     See Also: FileOpen
  7264.     
  7265.     Category: File
  7266.     
  7267.     
  7268.      FileRename (Old,New)
  7269.     
  7270.     Renames a file from old name to new. A file may be moved to a new
  7271.     directory with this command.
  7272.     
  7273.      Example:
  7274.        FileRename ('F:\HOME\MARC\MESSAGE.TXT','F:\HOME\VICKI\MESSAGE.TXT')
  7275.     
  7276.     Category: File
  7277.     
  7278.  
  7279.     Computer Tyme * MarxMenu * Users Manual                 Page #120
  7280.     -----------------------------------------------------------------
  7281.     
  7282.      FileResult : Number
  7283.     
  7284.     Returns result code from last file IO. Result codes are the same as
  7285.     Turbo Pascal IOResult codes. These codes usually match the errors
  7286.     returned in the AX register of DOS commands. 0 indicates no problem.
  7287.     
  7288.      Example:
  7289.        DelFile 'TEST.TXT'
  7290.        if FileResult = 5 then Writeln 'ACCESS DENIED!'
  7291.     
  7292.     Category: File
  7293.     
  7294.     
  7295.      FileSeek (FileVar,Number)
  7296.     
  7297.     Moves the file pointer to a specified place in the file. This allows you
  7298.     to set the next place in a file that FileReadln will read from.
  7299.     
  7300.     See Also: FilePos FileReadln
  7301.     
  7302.     Category: File
  7303.     
  7304.     
  7305.      FileSize (string) : Number
  7306.     
  7307.     Returns size of file in bytes.
  7308.     
  7309.      Example:
  7310.        FileSize 'CONFIG.SYS'
  7311.     
  7312.     Category: File
  7313.     
  7314.     
  7315.      FileTime (File) : Time
  7316.     
  7317.     Returns the time of a file in MarxMenu format. This should not be
  7318.     confused with FileDate that returns the file time on DOS binary format.
  7319.     
  7320.     Category: File Time
  7321.     
  7322.     
  7323.      FileWrite (FileVar,String)
  7324.     
  7325.     Writes text to a file without a carriage return or line feed.
  7326.     
  7327.      Example:
  7328.        FileWrite (Out,Char(12))   ;writes a FormFeed to the file Out
  7329.     
  7330.     See Also: FileOpen
  7331.     
  7332.     Category: File
  7333.     
  7334.  
  7335.     Computer Tyme * MarxMenu * Users Manual                 Page #121
  7336.     -----------------------------------------------------------------
  7337.     
  7338.      FileWriteln (FileVar,String)
  7339.     
  7340.     Writes text to a file with a carriage return and a line feed.
  7341.     
  7342.      Example:
  7343.        FileWriteln (Out,'This Line')
  7344.     
  7345.     See Also: FileOpen
  7346.     
  7347.     Category: File
  7348.     
  7349.     
  7350.      FixPath
  7351.     
  7352.     This command reads your path command and verifies that all the paths are
  7353.     accessible. Any path that isn't accessible is removed from the master
  7354.     environment. This can be used on network drives to eliminate searching
  7355.     paths on fileservers that are no longer accessible.
  7356.     
  7357.     Category: Environment
  7358.     
  7359.     
  7360.      Floppies : Number
  7361.     
  7362.     Returns number of floppy drives in your computer.
  7363.     
  7364.     Category: System
  7365.     
  7366.     
  7367.      ForceExplosion (On/Off)
  7368.     
  7369.     This changes the explosion status of a window that already exists. This
  7370.     allows windows to implode that didn't explode.
  7371.     
  7372.     Category: Display
  7373.     
  7374.     
  7375.      ForceExtension (String,Ext) : String
  7376.     
  7377.     This command forces a file extension on a string.
  7378.     
  7379.      Example:
  7380.        St = ForceExtension('MAIN.MNU','MRX')
  7381.     
  7382.     This sets St equal to MAIN.MRX
  7383.     
  7384.     Category: String
  7385.     
  7386.  
  7387.     Computer Tyme * MarxMenu * Users Manual                 Page #122
  7388.     -----------------------------------------------------------------
  7389.     
  7390.      Fraction (Real) : Real
  7391.     
  7392.     Returns the fractional part of a real.
  7393.     
  7394.      Example:
  7395.        Fraction (2.36)   ;returns .36
  7396.     
  7397.     Category: Math Float
  7398.     
  7399.     
  7400.      FreeDiskSpace <drive> : Number
  7401.     
  7402.     Returns free disk space in bytes.
  7403.     
  7404.      Example:
  7405.        Writeln (FreeDiskSpace 'C')
  7406.     
  7407.     FreeDiskSpace only looks at the first character of the string for the
  7408.     drive letter.
  7409.     
  7410.     Category: System
  7411.     
  7412.     
  7413.      FreeEMS : Number
  7414.     
  7415.     Returns free EMS memory in bytes.
  7416.     
  7417.     Category: Memory
  7418.     
  7419.     
  7420.      FreeMem(Segment)
  7421.     
  7422.     FreeMem deallocates memory that was allocated with GetMem. FreeMem
  7423.     automatically knows how much memory to deallocate.
  7424.     
  7425.     See Also: GetMem
  7426.     
  7427.     Category: Memory
  7428.     
  7429.     
  7430.      FreeMemory : Number
  7431.     
  7432.     Returns the amount of free memory still available. This is the memory
  7433.     available to MarxMenu or the amount you would have using the Execute
  7434.     command.
  7435.     
  7436.     See Also: ApplicationMemory
  7437.     
  7438.     Category: Memory
  7439.     
  7440.  
  7441.     Computer Tyme * MarxMenu * Users Manual                 Page #123
  7442.     -----------------------------------------------------------------
  7443.     
  7444.      GetMem (Number) : Segment
  7445.     
  7446.     GetMem allocates the amount of memory specified in Number and returns
  7447.     the memory segment where the memory was allocated. The memory segment is
  7448.     filled with 0s. The maximum size of the memory block is 65504 bytes.
  7449.     
  7450.     You can then read and write to this memory area using the Mem commands.
  7451.     
  7452.      Example:
  7453.        var RamBlock
  7454.        RamBlock = GetMem(2000)  ;allocate 2000 bytes of memory
  7455.        Mem(RamBlock,0) = 5      ;writes the number 5 to the first byte
  7456.     
  7457.     See Also: FreeMem
  7458.     
  7459.     Category: Memory
  7460.     
  7461.     
  7462.      GotoXY (column,row)
  7463.     
  7464.     Move cursor to location column,row in current box.
  7465.     
  7466.      Example:
  7467.        GotoXY 35 9
  7468.     
  7469.     Category: Display Ansi
  7470.     
  7471.     
  7472.      HexString (Number, Length) : String
  7473.     
  7474.     HexString converts a number into a base 16 hexadecimal string. If Length
  7475.     > 0 then the number will have enough leading zeros to make it Length
  7476.     long. If Length = 0 then leading zeros are removed. Length must be 8 or
  7477.     less.
  7478.     
  7479.      Example:
  7480.        Writeln HexString(253,4)   ;returns 00FD
  7481.        Writeln HexString(253,0)   ;returns FD
  7482.     
  7483.     See Also: BinString
  7484.     
  7485.     Category: String
  7486.     
  7487.     
  7488.      HiddenAndSystem (On/Off)
  7489.     
  7490.     Controls if ReadDirectory will read hidden and system files.
  7491.     
  7492.     See Also: ReadDirectory
  7493.     
  7494.     Category: File Directory
  7495.     
  7496.  
  7497.     Computer Tyme * MarxMenu * Users Manual                 Page #124
  7498.     -----------------------------------------------------------------
  7499.     
  7500.      HighWord (Number) : Number
  7501.     
  7502.     Returns the value of the upper 16 bits of a number.
  7503.     
  7504.     See Also: LowWord
  7505.     
  7506.     Category: Math
  7507.     
  7508.     
  7509.      Hour : Number
  7510.     
  7511.     Return the current hour. 24 hour format.
  7512.     
  7513.     Category: Time
  7514.     
  7515.     
  7516.      HourOf (Date) : Number
  7517.     
  7518.     Returns the hour of a date. If Date is passed as a string it is
  7519.     converted automatically.
  7520.     
  7521.      Example:
  7522.        HourOf '6:00 pm'  ;returns 18
  7523.     
  7524.     See Also: TimeOf BadDate
  7525.     
  7526.     Category: Time
  7527.     
  7528.     
  7529.      Hundredth : Number
  7530.     
  7531.     Returns the 1/100 of a second from the system clock. Note that the
  7532.     system clock timer tick is 1/18 second so don't expect a lot of accuracy
  7533.     here.
  7534.     
  7535.     Category: Time
  7536.     
  7537.     
  7538.      IdleProgram : Procedure
  7539.     
  7540.     IdleProgram is a variable that when set to the location of a procedure
  7541.     allows the procedure to run while waiting at the keyboard. This is done
  7542.     by writing a procedure that will run while waiting for input.
  7543.     
  7544.     The way you use this is to set an internal variable named IdleProgram to
  7545.     the Loc of the procedure you want to run as follows:
  7546.     
  7547.      Example:
  7548.        IdleProgram = Loc MyProcedure
  7549.     
  7550.     Note: Do not use parentheses around MyProcedure.
  7551.     
  7552.  
  7553.     Computer Tyme * MarxMenu * Users Manual                 Page #125
  7554.     -----------------------------------------------------------------
  7555.     
  7556.     When writing MyProcedure make it as short and quick as possible. As of
  7557.     now, MyProcedure is called continuously while there is no keyboard
  7558.     input. You can also use a loop in it as follows.
  7559.     
  7560.      Procedure MyProcedure
  7561.         SetItUp
  7562.         while not KBDReady
  7563.            {do your thing}
  7564.         endwhile
  7565.         PutItBack
  7566.      EndProc
  7567.     
  7568.     MarxMenu doesn't automatically exit your procedure or save and restore
  7569.     anything. If you're writing to the screen you have to put everything
  7570.     back the way it was.
  7571.     
  7572.     If you want to run a program at a specific time, here's how it can be
  7573.     done:
  7574.     
  7575.      Procedure MyProcedure
  7576.         if Now = TimeOf('11:00pm')
  7577.            Bat 'NIGHT'             ;run NIGHT.BAT
  7578.            ExitMenu
  7579.         endif
  7580.         if Now = TimeOf('5:00')
  7581.            Bat 'MORNING'           ;run MORNING.BAT
  7582.            ExitMenu
  7583.         endif
  7584.      EndProc
  7585.     
  7586.     To disable IdleProgram run:
  7587.     
  7588.       Dispose(IdleProgram)
  7589.     
  7590.     See Also: Run Loc BlankScreenProgram
  7591.     
  7592.     Category: Execution
  7593.     
  7594.     
  7595.      If
  7596.     
  7597.     Used for conditional program control.
  7598.     
  7599.      Usage:
  7600.     
  7601.      IF (condition) THEN (statement)
  7602.     
  7603.      IF (condition)
  7604.         (statement)
  7605.         (statement)
  7606.     
  7607.  
  7608.     Computer Tyme * MarxMenu * Users Manual                 Page #126
  7609.     -----------------------------------------------------------------
  7610.     
  7611.      ELSEIF (condition)
  7612.         (statement)
  7613.         (statement)
  7614.     
  7615.      ELSE
  7616.         (statement)
  7617.         (statement)
  7618.     
  7619.      ENDIF
  7620.     
  7621.     Category: Conditional
  7622.     
  7623.     See Also: Else ElseIf Then EndIf
  7624.     
  7625.     
  7626.      InactiveBox (BoxType)
  7627.     
  7628.     This is used to select the type of box border to use when a window is
  7629.     not the current window. If any inactive box type is specified, then when
  7630.     you execute another DrawBox, the old window's border changes to the
  7631.     inactive box type. The inactive window also loses its headers and
  7632.     shadows.
  7633.     
  7634.     Note that InActiveBox must be used BEFORE the DrawBox command.
  7635.     
  7636.      Example:
  7637.        InActiveBox (SingleLineBox) ;switches to single line box if
  7638.                                     inactive.
  7639.     
  7640.        InactiveBox (NoBoxBorder)   ;disables InActive effect.
  7641.     
  7642.     See Also: InactiveBoxColor InactiveShadow
  7643.     
  7644.     Category: Display
  7645.     
  7646.     
  7647.      InactiveBoxColor (foreground,background)
  7648.     
  7649.     Selects the color of the inactive box window. If Black on Black is
  7650.     selected, (default), the inactive box color is the same as the active
  7651.     box color.
  7652.     
  7653.      Example:
  7654.        BoxBorderColor Yellow Blue
  7655.        InActiveBoxColor Brown Blue
  7656.     
  7657.     See Also: InactiveBox InactiveShadow
  7658.     
  7659.     Category: Color
  7660.     
  7661.  
  7662.     Computer Tyme * MarxMenu * Users Manual                 Page #127
  7663.     -----------------------------------------------------------------
  7664.     
  7665.      InactiveShadow (On/Off)
  7666.     
  7667.     When InactiveShadow is set to off, the window shadow disappears when
  7668.     then window is not the top window.
  7669.     
  7670.     See Also: InactiveBox InactiveBoxColor
  7671.     
  7672.     Category: Display
  7673.     
  7674.     
  7675.      Include (MenuName)
  7676.     
  7677.     This is used to insert the menu code from another file into the menu
  7678.     that you are compiling.
  7679.     
  7680.      Example:
  7681.        Include 'DOS.MNU'
  7682.     
  7683.     This will compile DOS.MNU into your present menu as if that whole file
  7684.     were part of the menu you are working on.
  7685.     
  7686.     This is useful if you have several menus that share common code. By
  7687.     moving this common code to a separate file, and using an Include
  7688.     statement, you can change the common code and update several menus at
  7689.     once. If you are using overlays, it is a good idea to put your shared
  7690.     variables in an include file. This assures that the shared variables
  7691.     will be the same for all overlays.
  7692.     
  7693.     Changing an include file does not cause MarxMenu to recompile
  7694.     automatically like changing the MNU does. You will have to force it to
  7695.     compile your menus.
  7696.     
  7697.     This can be done several ways. You can type MARXCOMP (menu) or you can
  7698.     just type DEL *.MRX which will cause all the menus to recompile the next
  7699.     time they are run.
  7700.     
  7701.     Category: Misc
  7702.     
  7703.     
  7704.      IncludeDirectories (On/Off)
  7705.     
  7706.     Controls if ReadDirectory will read directories along with file names.
  7707.     Please note that the Parent Directory <..> will not be shown.
  7708.     
  7709.      Example:
  7710.        Var X
  7711.        IncludeDirectories On
  7712.        DirectoriesOnly on
  7713.        ReadDirectory('*.*',X)
  7714.     
  7715.  
  7716.     Computer Tyme * MarxMenu * Users Manual                 Page #128
  7717.     -----------------------------------------------------------------
  7718.     
  7719.     See Also: ReadDirectory
  7720.     
  7721.     Category: Directory
  7722.     
  7723.     
  7724.      InFile : String
  7725.     
  7726.     When using StandardIO the input and output files by default use the
  7727.     console. The input can be overridden by setting InFile to point to a
  7728.     different file or device.
  7729.     
  7730.      Example:
  7731.        InFile = 'INPUT.TXT'
  7732.        StandardIO
  7733.     
  7734.     See Also: OutFile StandardIO
  7735.     
  7736.     Category: File
  7737.     
  7738.     
  7739.      InputBlankChar
  7740.     
  7741.     InputBlankChar is used with Readln to display the input string area for
  7742.     entering information into a string. By default it is set to a space
  7743.     character but can be set to an underline or other characters to make the
  7744.     field size visible.
  7745.     
  7746.      Example:
  7747.        InputBlankChar = '_'  ;underline
  7748.        InputLength = 10
  7749.        Write 'Enter Postal Code: '
  7750.        ZipCode = Readln
  7751.     
  7752.     See Also: Readln
  7753.     
  7754.     Category: String
  7755.     
  7756.     
  7757.      InputLength
  7758.     
  7759.     When using Readln to get input from the keyboard, MarxMenu normally
  7760.     accepts data from the cursor to the edge of the current window. By
  7761.     setting InputLength to a value, MarxMenu will limit the size of the data
  7762.     to a specific length.
  7763.     
  7764.      Example:
  7765.        InputLength = 10
  7766.        Write 'Enter Postal Code: '
  7767.        ZipCode = Readln
  7768.     
  7769.     InputLength is reset to 0 after each Readln.
  7770.     
  7771.  
  7772.     Computer Tyme * MarxMenu * Users Manual                 Page #129
  7773.     -----------------------------------------------------------------
  7774.     
  7775.     See Also: Readln
  7776.     
  7777.     Category: String
  7778.     
  7779.     
  7780.      InputString (String)
  7781.     
  7782.     Preloads a string for the Readln command. The next Readln will have the
  7783.     InputString on the screen for you to edit or accept. Once Readln
  7784.     executes, InputString is cleared to a blank string.
  7785.     
  7786.      Example:
  7787.        InputString = ReadEnv('USERNAME')
  7788.        YourName = Readln
  7789.     
  7790.     See Also: Readln
  7791.     
  7792.     Category: String
  7793.     
  7794.     
  7795.      Insert (InsString,OrigString,Pos)
  7796.     
  7797.     Inserts a string into a string.
  7798.     
  7799.      Example:
  7800.        St = 'ABCDEF'
  7801.        Insert('123',St,4)
  7802.     
  7803.     St will become 'ABC123DEF'
  7804.     
  7805.     Category: String
  7806.     
  7807.     
  7808.      InsertMode (On/Off)
  7809.     
  7810.     Turns insert mode on and off for Readln commands.
  7811.     
  7812.     See Also: Readln
  7813.     
  7814.     Category: Keyboard
  7815.     
  7816.     
  7817.      Int (Real) : Real
  7818.     
  7819.     Returns the integer part of a real as a real.
  7820.     
  7821.      Example:
  7822.        Int(2.36)  ;returns 2.0
  7823.     
  7824.     Category: Math Float
  7825.     
  7826.  
  7827.     Computer Tyme * MarxMenu * Users Manual                 Page #130
  7828.     -----------------------------------------------------------------
  7829.     
  7830.      Integer (Real) : Number
  7831.     
  7832.     Returns the integer part of a real as an integer. The fractional part is
  7833.     truncated.
  7834.     
  7835.      Example:
  7836.        Int(2.36)  ;returns 2
  7837.     
  7838.     Category: Math Float
  7839.     
  7840.     
  7841.      Intr (Interrupt,Registers)
  7842.     
  7843.     Intr works just like MS-DOS except that it lets you choose which
  7844.     interrupt you want to call. See MS-DOS manual for Details.
  7845.     
  7846.     See Also: MS-DOS
  7847.     
  7848.     Category: System
  7849.     
  7850.     
  7851.      InverseColor (forecolor,backcolor)
  7852.     
  7853.     Sets colors for inverse bar used with UseArrows command.
  7854.     
  7855.      Example:
  7856.        InverseColor Yellow Mag
  7857.     
  7858.     Category: Color
  7859.     
  7860.     
  7861.      InvertString (String)
  7862.     
  7863.     InvertString turns a string around so that characters are in reverse
  7864.     order. This allows for correct string compares and sorts in Hebrew and
  7865.     Arabic and other languages that are read from right to left.
  7866.     
  7867.      Example:
  7868.        var St
  7869.        St = 'ABCDE'
  7870.        InvertString(St)
  7871.        Writeln St        ;Returns 'EDCBA'
  7872.     
  7873.     Category: String
  7874.     
  7875.     
  7876.      Jump (menu)
  7877.     
  7878.     Jumps to another menu and does not return to original menu.
  7879.     
  7880.      Example:
  7881.        Jump 'MYMENU'
  7882.     
  7883.  
  7884.     Computer Tyme * MarxMenu * Users Manual                 Page #131
  7885.     -----------------------------------------------------------------
  7886.     
  7887.     See Also: Chain
  7888.     
  7889.     Category: Execution
  7890.     
  7891.     
  7892.      KbdReady : Boolean
  7893.     
  7894.     Returns true if a Key has been pressed.
  7895.     
  7896.     See Also: ReadKey
  7897.     
  7898.     Category: Keyboard
  7899.     
  7900.     
  7901.      KeyEvent (Key) : Procedure
  7902.     
  7903.     KeyEvent allows you to assign a procedure to a key so that any time the
  7904.     key is pressed the procedure is called. Setting a key to Nil clears the
  7905.     key. This command can be used to create global OnKey.
  7906.     
  7907.      Example:
  7908.         KeyEvent(F1) = loc ShowHelp   ;runs ShowHelp when F1 is pressed
  7909.         KeyEvent(F1) = Nil            ;clears F1 key
  7910.         Run KeyEvent(F1)              ;executes procedure assigned to F1
  7911.     
  7912.     KeyEvents are attached to the current window. New windows inherit the
  7913.     KeyEvents from their parent window. But if you create a new KeyEvent in
  7914.     a window and then erase that window the new KeyEvent is erased and the
  7915.     KeyEvents of the parent window are restored. You can have completely
  7916.     different KeyEvents for each window and those events become active
  7917.     whenever the window becomes active.
  7918.     
  7919.     Category: Execution Event
  7920.     
  7921.     
  7922.      KeyFromMouse : Boolean
  7923.     
  7924.     Normally mouse activity is translated into keystrokes. This variable is
  7925.     set to true if the keystroke came from the mouse.
  7926.     
  7927.     See Also: KbdReady ReadKey
  7928.     
  7929.     Category: MouseControl
  7930.     
  7931.     
  7932.      KeySave : String
  7933.     
  7934.     Stores your keystrokes that you pressed to get to the menu level where
  7935.     you are at. KeySave is passed to DOS using the SET KSV= command to store
  7936.     your position in the menu system. To make this work, you must execute
  7937.     SavePosition On.
  7938.     
  7939.  
  7940.     Computer Tyme * MarxMenu * Users Manual                 Page #132
  7941.     -----------------------------------------------------------------
  7942.     
  7943.     This variable can be set by you to force MarxMenu to return to a place
  7944.     in the menu other than where you are. This allows MarxMenu to suggest a
  7945.     next step.
  7946.     
  7947.     See Also: SavePosition
  7948.     
  7949.     Category: String Environment Execution
  7950.     
  7951.     
  7952.      KillMusic
  7953.     
  7954.     This command stops the music and de-allocates the memory used by the
  7955.     music buffer.
  7956.     
  7957.     Category: Music
  7958.     
  7959.     
  7960.      LastDrive : String
  7961.     
  7962.     Returns the drive letter of the last local drive in the system as set by
  7963.     CONFIG.SYS. By default, this is drive letter E. On a Novell network the
  7964.     drive after LastDrive is the first network drive.
  7965.     
  7966.     Category: Novell System
  7967.     
  7968.     
  7969.      LastKey : String
  7970.     
  7971.     LastKey returns the last key that was typed at the keyboard. This can be
  7972.     used after a Readln to determine if the ESC key was pressed or perhaps
  7973.     the up or down arrow keys.
  7974.     
  7975.     Sometimes after the press of an ESC key, MarxMenu wants to exit more
  7976.     levels than you want it to. This can be controlled by setting LastKey =
  7977.     ' ' to stop the abort process.
  7978.     
  7979.     See Also: Readln OnKey
  7980.     
  7981.     Category: String
  7982.     
  7983.     
  7984.      Left (string,count) : String
  7985.     
  7986.     Returns string starting at the beginning for count characters.
  7987.     
  7988.      Example:
  7989.        Left('ABCDEF',3)   ;returns 'ABC'
  7990.     
  7991.     Category: String
  7992.     
  7993.  
  7994.     Computer Tyme * MarxMenu * Users Manual                 Page #133
  7995.     -----------------------------------------------------------------
  7996.     
  7997.      Length (string) : Number
  7998.     
  7999.     Returns the length of the string or sets the length of a string.
  8000.     
  8001.      Example:
  8002.        Length('ABCD') returns 4.
  8003.     
  8004.      Example:
  8005.        var St
  8006.          St = '123456'
  8007.          Length(St) = 3
  8008.          Writeln St      ;this produces '123'
  8009.     
  8010.     If you set the length longer than the original string the string is
  8011.     padded with blanks on the end.
  8012.     
  8013.     Category: String
  8014.     
  8015.     
  8016.      Ln (Real) : Real
  8017.     
  8018.     Returns the Natural Logarithm of a real.
  8019.     
  8020.      Example:
  8021.        Exp(Ln(5) * 3) = 125
  8022.     
  8023.     See Also: Exp
  8024.     
  8025.     Category: Math Float
  8026.     
  8027.     
  8028.      Loc (Procedure or Variable)
  8029.     
  8030.     When used with a procedure, Loc returns the location of a procedure for
  8031.     storing in a variable. The variable is later executed using the Run
  8032.     command.
  8033.     
  8034.     When used with a variable, Loc returns the location of a variable rather
  8035.     than it's contents. Thus B = Loc A sets B to point to A.
  8036.     
  8037.      Example:
  8038.        Var A B
  8039.           B = Loc A
  8040.           B = 9
  8041.           Writeln A  ;returns 9
  8042.     
  8043.      Example:
  8044.        Var A
  8045.     
  8046.      TestLoc (Loc A)
  8047.      Writeln A ;returns 9
  8048.     
  8049.  
  8050.     Computer Tyme * MarxMenu * Users Manual                 Page #134
  8051.     -----------------------------------------------------------------
  8052.     
  8053.      Procedure TestLoc (B)
  8054.         B = 9
  8055.      EndProc
  8056.     
  8057.     The rule is that all indirect location references are resolved in the
  8058.     process of evaluating an expression.
  8059.     
  8060.      Example:
  8061.        Var A B C D
  8062.           B = Loc A
  8063.           C = Loc B
  8064.           D = Loc C
  8065.           D = 9
  8066.           Writeln A   ; Returns 9
  8067.     
  8068.     As you would expect, qualifiers and multidimensional array addressing
  8069.     works with indirect addressing.
  8070.     
  8071.      Example:
  8072.        var A B C D E
  8073.     
  8074.        A[3] = 12
  8075.        C = 3
  8076.        B = Loc C
  8077.     
  8078.        D = Loc E
  8079.        D[7] = 8
  8080.     
  8081.        TestLoc (Loc A[B])
  8082.        Writeln A[B,9,E[7]]
  8083.     
  8084.        Procedure TestLoc (X)
  8085.           Writeln X
  8086.           X[9,D[7]] = 6
  8087.           Writeln X[9,E[7]]
  8088.        EndProc
  8089.     
  8090.     See Also: Run Actual
  8091.     
  8092.     Category: Variable
  8093.     
  8094.     
  8095.      LockWord (word)
  8096.     
  8097.     Sets a default word for the console activated keyboard lock. When the
  8098.     screen goes blank, the user has to type the LockWord to unblank the
  8099.     screen. This is a security feature so that if a user leaves the menu
  8100.     unattended, it prevents others from tampering with the system.
  8101.     
  8102.  
  8103.     Computer Tyme * MarxMenu * Users Manual                 Page #135
  8104.     -----------------------------------------------------------------
  8105.     
  8106.      Example:
  8107.        LockWord = 'secret'
  8108.     
  8109.     See Also: LogoffTime BlankTime UseNovPassword
  8110.     
  8111.     Category: Display
  8112.     
  8113.     
  8114.      Logoff
  8115.     
  8116.     Logoff logs you off the network the same way that LogoffTime does except
  8117.     it does it immediately. See LogoffTime for details as to how.
  8118.     
  8119.      Example:
  8120.        OnKey 'L'
  8121.          |Logoff   ;note the use of the '|' under the OnKey statement
  8122.     
  8123.     See Also: LogoffTime
  8124.     
  8125.     Category: Execution
  8126.     
  8127.     
  8128.      LogoffTime : Number
  8129.     
  8130.     MarxMenu supports automatic logoff after a number of minutes of
  8131.     inactivity set by LogoffTime. This only has effect while you are in the
  8132.     menu and not while an application is running. It is set as follows:
  8133.     
  8134.      LogoffTime = 5 ;sets time to 5 minutes
  8135.     
  8136.     Setting LogoffTime to 0 disables this feature.
  8137.     
  8138.     On a Novell network the current drive is changed to the first network
  8139.     drive letter. Any map roots on this drive are removed. Then it changes
  8140.     to the \LOGIN directory. Typically the current directory will be set to
  8141.     F:\LOGIN.
  8142.     
  8143.     MarxMenu will first look for a batch file in the \LOGIN directory called
  8144.     OFF.BAT. If it doesn't find it, MarxMenu will look for OFF.BAT on the
  8145.     PATH. If this isn't found, MarxMenu will look for LOGOFF.EXE. If this
  8146.     isn't found, then MarxMenu will look for LOGOUT.COM.
  8147.     
  8148.     LOGOFF.EXE and LOGOUT.COM are executed by stuffing the keyboard buffer.
  8149.     
  8150.     The best way to use this feature is to create an OFF.BAT file in your
  8151.     \LOGIN directory or on the PATH.
  8152.     
  8153.     Logging off is a tricky process and requires that everything is done
  8154.     right in order for it to work. If strange things happen use ECHO ON and
  8155.     PAUSE in you batch files in order to watch what is happening.
  8156.     
  8157.  
  8158.     Computer Tyme * MarxMenu * Users Manual                 Page #136
  8159.     -----------------------------------------------------------------
  8160.     
  8161.     See Also: LockWord Logoff
  8162.     
  8163.     Category: Execution
  8164.     
  8165.     
  8166.      Logout
  8167.     
  8168.     Same as Logoff.
  8169.     
  8170.     See Also: Logoff LogoffTime
  8171.     
  8172.     Category: Execution
  8173.     
  8174.     
  8175.      LongestLine
  8176.     
  8177.     This system variable is set whenever a text file is read using the
  8178.     ReadTextFile command. LongestLine is set to the length of the longest
  8179.     line in the file.
  8180.     
  8181.      Example:
  8182.        var temp, temp2
  8183.        write "Name of file to scan: "
  8184.        temp=readln
  8185.        ReadTextFile(temp,temp2)
  8186.        writeln " "
  8187.        write "The longest line in " temp " is "
  8188.        writeln Longestline " Characters."
  8189.     
  8190.     See Also: ReadTextFile
  8191.     
  8192.     Category: File String
  8193.     
  8194.     
  8195.      Loop
  8196.     
  8197.     MarxMenu has a looping structure that lets you execute a piece of code a
  8198.     specific number of times. It is used as follows:
  8199.     
  8200.      Example:
  8201.        Loop 8
  8202.           Writeln 'Pass Number ' LoopIndex
  8203.        EndLoop
  8204.     
  8205.     You start with LOOP (Number) which specifies the number of times to
  8206.     execute the code between LOOP and ENDLOOP. There are 2 variables
  8207.     available here for loop control. LoopIndex starts at 1 and is
  8208.     incremented at each EndLoop. When LoopIndex becomes greater than
  8209.     LoopLimit, the loop exits. LoopIndex and LoopLimit refer to the
  8210.     innermost loop.
  8211.     
  8212.  
  8213.     Computer Tyme * MarxMenu * Users Manual                 Page #137
  8214.     -----------------------------------------------------------------
  8215.     
  8216.     As loops are nested LoopIndexes and LoopLimits are kept in two arrays;
  8217.     LoopIndexStack and LoopLimitStack. There is also a variable called
  8218.     LoopLevel which points to the current loop parameters.
  8219.     
  8220.      Thus:
  8221.        LoopIndex is the same as LoopIndexStack[LoopLevel]
  8222.        LoopLimit is the same as LoopLimitStack[LoopLevel]
  8223.     
  8224.     You may therefore access outer loop parameters through the loop stacks.
  8225.     For instance LoopIndexStack[LoopLevel - 1] would refer to the second
  8226.     innermost loop index. LoopIndexStack[1] refers to the outermost loop.
  8227.     
  8228.     The loop variables can be read and written to so you can adjust the
  8229.     looping parameters while inside the loop. You can even adjust the
  8230.     parameters of outer loops.
  8231.     
  8232.     You can also pass an array to a loop instead of a number. If an array is
  8233.     passed MarxMenu will loop for the number of elements in that array.
  8234.     
  8235.      Example:
  8236.        Var X
  8237.        ReadTextFile('MARXREAD.ME',X)
  8238.        OpenPrinter
  8239.     
  8240.        ;Loop X is the same as Loop NumberOfElements X
  8241.     
  8242.        Loop X
  8243.           PrintLn X[LoopIndex]
  8244.        EndLoop
  8245.        ClosePrinter
  8246.     
  8247.     See Also: EndLoop LoopIndex LoopLimit LoopLevel
  8248.     
  8249.     Category: Conditional
  8250.     
  8251.     
  8252.      LoopIndex : Number
  8253.     
  8254.     Returns the index of the loop you are in.
  8255.     
  8256.      Example:
  8257.        Loop 5
  8258.           Writeln LoopIndex    ;writes the numbers 1 to 5
  8259.        EndLoop
  8260.     
  8261.     See Also: Loop EndLoop LoopLimit LoopLevel
  8262.     
  8263.     Category: Conditional
  8264.     
  8265.  
  8266.     Computer Tyme * MarxMenu * Users Manual                 Page #138
  8267.     -----------------------------------------------------------------
  8268.     
  8269.      LoopLevel : Number
  8270.     
  8271.     Returns the number of nested loops currently running. This includes all
  8272.     nested loops not just the current procedure.
  8273.     
  8274.     See Also: Loop EndLoop LoopLimit LoopIndex
  8275.     
  8276.     Category: Conditional
  8277.     
  8278.     
  8279.      LoopLimit : Number
  8280.     
  8281.     Returns the upper limit of the loop you are in.
  8282.     
  8283.      Example:
  8284.        Loop 5
  8285.           Writeln LoopLimit   ;writes the number 5, 5 times.
  8286.        EndLoop
  8287.     
  8288.     See Also: Loop EndLoop LoopIndex LoopLevel
  8289.     
  8290.     Category: Conditional
  8291.     
  8292.     
  8293.      LowerCase (String) : String
  8294.     
  8295.     Returns the lower case of the string according to international
  8296.     character rules.
  8297.     
  8298.      Example:
  8299.        Writeln LowerCase('ABCDE')   ;returns 'abcde'
  8300.     
  8301.     See Also: UpperCase
  8302.     
  8303.     Category: String International
  8304.     
  8305.     
  8306.      LowWord (Number) : Number
  8307.     
  8308.     Returns the value of the lower 16 bits of a number.
  8309.     
  8310.      Example:
  8311.        LowWord -1   ;returns 255
  8312.     
  8313.     See Also: HighWord
  8314.     
  8315.     Category: Math
  8316.     
  8317.  
  8318.     Computer Tyme * MarxMenu * Users Manual                 Page #139
  8319.     -----------------------------------------------------------------
  8320.     
  8321.      MachineName : String
  8322.     
  8323.     This reads or sets the MachineName for NetBios networks.
  8324.     
  8325.      Example:
  8326.        MachineName = IBM   ;sets the MachineName
  8327.        Writeln MachineName ;displays the MachineName
  8328.     
  8329.     Category: Novell MSNet Vines
  8330.     
  8331.     
  8332.      MakeListEntry (Local Name, Server Name)
  8333.     
  8334.     MakeListEntry adds an entry to the network redirection list for
  8335.     assigning drive letters to network servers or redirecting printer output
  8336.     to network printers.
  8337.     
  8338.      Example:
  8339.        MakeListEntry ('P:','\\TYME\SYS\PUBLIC')
  8340.        MakeListEntry ('LPT1','\\TYME\LASER')
  8341.     
  8342.     See Also: AssignList CancelListEntry
  8343.     
  8344.     Category: Novell MSNet Vines
  8345.     
  8346.     
  8347.      MarxVersion : String
  8348.     
  8349.     Returns the version number of the MarxMenu you are running.
  8350.     
  8351.     Category: String
  8352.     
  8353.     
  8354.      MasterEnvironment
  8355.     
  8356.     MasterEnvironment selects the Master Environment for use with
  8357.     environment access commands.
  8358.     
  8359.     See Also: ReadEnv SetEnv ReadEnvironment ShellEnvironment
  8360.     See Also: CurrentEnvironment ParentEnvironment
  8361.     
  8362.     Category: Environment
  8363.     
  8364.     
  8365.      Max (Num,Num) : Num
  8366.     
  8367.     Returns the largest of two numbers or strings.
  8368.     
  8369.      Example:
  8370.        Writeln Max(2,3)     ;returns 3
  8371.     
  8372.     See Also: Min
  8373.     
  8374.  
  8375.     Computer Tyme * MarxMenu * Users Manual                 Page #140
  8376.     -----------------------------------------------------------------
  8377.     
  8378.     Category: Math String Float
  8379.     
  8380.     
  8381.      MatrixInvert (2D Array)
  8382.     
  8383.     MatrixInvert reverses the coordinates of a 2 dimensional array. This is
  8384.     useful when used with ReadAscTextFile to reverse the field and record
  8385.     layout.
  8386.     
  8387.      Example:
  8388.        var Data NameList
  8389.     
  8390.        ReadAscTextFile('PHONE.LST',Data)
  8391.        MatrixInvert Data
  8392.        NameList = Data[1]
  8393.     
  8394.     Category: Array
  8395.     
  8396.     
  8397.      Mem (seg,ofs) : Number
  8398.     
  8399.     Returns the byte at memory location seg:ofs or lets you write to the
  8400.     byte at seg:ofs.
  8401.     
  8402.      Example:
  8403.        X = Mem(40,5)  ;reads memory into X
  8404.        Mem(40,5) = X  ;writes X into memory
  8405.     
  8406.     See Also: MemW MemL
  8407.     
  8408.     Category: Memory
  8409.     
  8410.     
  8411.      MemL (seg,ofs) : Number
  8412.     
  8413.     Returns the long integer at memory location seg:ofs or lets you write to
  8414.     the byte at seg:ofs.
  8415.     
  8416.      Example:
  8417.        X = MemL(40,5)  ;reads memory into X
  8418.        MemL(40,5) = X  ;writes X into memory
  8419.     
  8420.     See Also: Mem MemW
  8421.     
  8422.     Category: Memory
  8423.     
  8424.  
  8425.     Computer Tyme * MarxMenu * Users Manual                 Page #141
  8426.     -----------------------------------------------------------------
  8427.     
  8428.      MemSize : Number
  8429.     
  8430.     Returns total memory size in K. (640 = 640k)
  8431.     
  8432.     Category: Memory
  8433.     
  8434.     
  8435.      MemW (seg,ofs) : Number
  8436.     
  8437.     Returns the word at memory location seg:ofs or lets you write to the
  8438.     byte at seg:ofs.
  8439.     
  8440.      Example:
  8441.        X = MemW(40,5)  ;reads memory into X
  8442.        MemW(40,5) = X  ;writes X into memory
  8443.     
  8444.     See Also: Mem MemL
  8445.     
  8446.     Category: Memory
  8447.     
  8448.     
  8449.      MenuKeyBuffer
  8450.     
  8451.     This is an internal MarxMenu variable. It is where the environment
  8452.     variable KSV= is read. Characters in this string variable are treated as
  8453.     if someone had typed them from the keyboard.
  8454.     
  8455.     This variable can be set to blank in order to override the effects of
  8456.     SET KSV= or can be set to a different value in order to automatically
  8457.     make selections as if they were typed in.
  8458.     
  8459.     See Also: SavePosition KeySave
  8460.     
  8461.     Category: Keyboard
  8462.     
  8463.     
  8464.      MhsDirectory : String
  8465.     
  8466.     Returns the directory of MHS.
  8467.     
  8468.      Example:
  8469.        Writeln MhsDirectory   ; '\\TYME\SYS\MHS'
  8470.     
  8471.     Category: MHS Directory
  8472.     
  8473.     
  8474.      MhsMailDirectory : String
  8475.     
  8476.     Returns the mail directory of MHS.
  8477.     
  8478.      Example:
  8479.        Writeln MhsMailDirectory   ; '\\TYME\SYS\MHS\MAIL'
  8480.     
  8481.  
  8482.     Computer Tyme * MarxMenu * Users Manual                 Page #142
  8483.     -----------------------------------------------------------------
  8484.     
  8485.     Category: MHS Directory
  8486.     
  8487.     
  8488.      MhsReadFile (FileName,Header,Message)
  8489.     
  8490.     MhsReadFile reads FileName into two arrays. The Header array contains the
  8491.     MHS message header. The Message array contains the MHS message.
  8492.     
  8493.      Example:
  8494.        var MailFiles Mail Headers X
  8495.     
  8496.        WholeFileNames
  8497.        ReadDirectory(MhsUserDirectory + '\MHS\*.',MailFiles)
  8498.     
  8499.        Loop MailFiles
  8500.           MhsReadFile(MailFiles[LoopIndex],Mail[LoopIndex],Headers[LoopIndex])
  8501.        EndLoop
  8502.     
  8503.        Loop Mail
  8504.           X = LoopIndex
  8505.           Loop Headers[X]
  8506.              Writeln Headers[X,LoopIndex]
  8507.           EndLoop
  8508.     
  8509.           Loop Mail[X]
  8510.              Writeln Mail[X,LoopIndex]
  8511.           EndLoop
  8512.        EndLoop
  8513.     
  8514.     Category: MHS
  8515.     
  8516.     
  8517.      MhsSendDirectory : String
  8518.     
  8519.     Returns the directory of MHS where messages are placed to be sent.
  8520.     
  8521.      Example:
  8522.        Writeln MhsSendDirectory   ; '\\TYME\SYS\MHS\MAIL\SND'
  8523.     
  8524.     Category: MHS Directory
  8525.     
  8526.     
  8527.      MhsUserDirectory : String
  8528.     
  8529.     Returns the user directory of MHS.
  8530.     
  8531.      Example:
  8532.        Writeln MhsMailDirectory   ; '\\TYME\SYS\MHS\MAIL\USERS\MARC'
  8533.     
  8534.     Category: MHS Directory
  8535.     
  8536.  
  8537.     Computer Tyme * MarxMenu * Users Manual                 Page #143
  8538.     -----------------------------------------------------------------
  8539.     
  8540.      Mid (string,pos,count) : String
  8541.     
  8542.     Returns a string starting at pos for count.
  8543.     
  8544.      Example:
  8545.        Writeln Mid('ABCDEFG',2,3)     ;returns 'CDE'
  8546.     
  8547.     Mid also allows you to write into a string at a specified point.
  8548.     
  8549.      Example:
  8550.        St = 'ABCDEFG'
  8551.        Mid(St,3) = '1'           X becomes 'AB1DEFG'
  8552.        Mid(St,3) = '123'         X becomes 'AB123FG'
  8553.        Mid(St,3) = '1234567'     X becomes 'AB1234567'
  8554.        Mid(St,9) = '12'          X becomes 'ABCDEFG 12'
  8555.     
  8556.     Category: String
  8557.     
  8558.     
  8559.      Min (Num,Num) : Num
  8560.     
  8561.     Returns the smallest of two numbers or strings.
  8562.     
  8563.      Example:
  8564.        Writeln Min(2,3)     ;returns 2
  8565.     
  8566.     See Also: Max
  8567.     
  8568.     Category: Math String Float
  8569.     
  8570.     
  8571.      MinorDosVersion : Number
  8572.     
  8573.     Returns the minor DOS version number.
  8574.     
  8575.     See Also: DosVersion DosVersionString
  8576.     
  8577.     Category: System
  8578.     
  8579.     
  8580.      Minute : Number
  8581.     
  8582.     Returns the current minute.
  8583.     
  8584.     Category: Time
  8585.     
  8586.  
  8587.     Computer Tyme * MarxMenu * Users Manual                 Page #144
  8588.     -----------------------------------------------------------------
  8589.     
  8590.      MinuteOf (Date) : Number
  8591.     
  8592.     Returns the minute of a date. If Date is passed as a string it is
  8593.     converted automatically.
  8594.     
  8595.      Example:
  8596.        MinuteOf '6:15 pm'  ;returns 15
  8597.     
  8598.     See Also: TimeOf BadDate
  8599.     
  8600.     Category: Time
  8601.     
  8602.     
  8603.      MkDir (String)
  8604.     
  8605.     Makes a new directory. The FileResult variable returns the DOS result
  8606.     error code. A zero in FileResult indicates success.
  8607.     
  8608.      Example:
  8609.        MkDir 'C:\MARX'
  8610.     
  8611.     See Also: ChDir RmDir
  8612.     
  8613.     Category: File Directory
  8614.     
  8615.     
  8616.      Mod : Operator
  8617.     
  8618.     Returns the remainder of the division of two numbers.
  8619.     
  8620.      Example:
  8621.        25 mod 7 = 4
  8622.     
  8623.     Category: Math
  8624.     
  8625.     
  8626.      ModifyPath
  8627.     
  8628.     The MarxMenu directory should be in the search path. This is because if
  8629.     you change directories, MarxMenu may not be able to find the menu files.
  8630.     MarxMenu will now test the PATH= environment variable before it writes
  8631.     the batch file to execute a program. If the MarxMenu path is not
  8632.     included, MarxMenu will add the path to the Master Environment if it
  8633.     can.
  8634.     
  8635.     If for some reason you don't want to allow MarxMenu to modify the master
  8636.     environment, use the command:
  8637.     
  8638.      ModifyPath Off
  8639.     
  8640.     Category: Environment
  8641.     
  8642.  
  8643.     Computer Tyme * MarxMenu * Users Manual                 Page #145
  8644.     -----------------------------------------------------------------
  8645.     
  8646.      Month : Number
  8647.     
  8648.     Returns current month.
  8649.     
  8650.     Category: Time
  8651.     
  8652.     
  8653.      MonthOf (Date) : Number
  8654.     
  8655.     Returns the month of a date. If Date is passed as a string it is
  8656.     converted automatically.
  8657.     
  8658.      Example:
  8659.        MonthOf 'April'   ;returns 4
  8660.     
  8661.     See Also: TimeOf BadDate
  8662.     
  8663.     Category: Time
  8664.     
  8665.     
  8666.      Mouse
  8667.     
  8668.     MarxMenu normally uses the mouse if present. If you don't want to use
  8669.     the mouse you can use the command:
  8670.     
  8671.      Mouse Off
  8672.     
  8673.     To turn the mouse back on type:
  8674.     
  8675.      Mouse On
  8676.     
  8677.     The mouse is actually switched on and off at the point when MarxMenu
  8678.     waits at the keyboard for a keypress.
  8679.     
  8680.     Mouse Sensitivity can be set for individual workstations on a network by
  8681.     setting environment variables MouseX and MouseY as follows:
  8682.     
  8683.      Set MouseX=15
  8684.      Set MouseY=25
  8685.     
  8686.     See Also: MouseHorizontal MouseVertical
  8687.     
  8688.     Category: MouseControl
  8689.     
  8690.     
  8691.      MouseHorizontal (Number)
  8692.     
  8693.     Controls the horizontal sensitivity of the mouse. The larger the number,
  8694.     the less sensitive the mouse. Default is 25.
  8695.     
  8696.      Example:
  8697.        MouseHorizontal = 25
  8698.     
  8699.  
  8700.     Computer Tyme * MarxMenu * Users Manual                 Page #146
  8701.     -----------------------------------------------------------------
  8702.     
  8703.     See Also: MouseVertical Mouse
  8704.     
  8705.     Category: MouseControl
  8706.     
  8707.     
  8708.      MouseVertical (Number)
  8709.     
  8710.     Controls the vertical sensitivity of the mouse. The larger the number,
  8711.     the less sensitive the mouse. Default is 15.
  8712.     
  8713.      Example:
  8714.        MouseVertical = 15
  8715.     
  8716.     See Also: MouseHorizontal Mouse
  8717.     
  8718.     Category: MouseControl
  8719.     
  8720.     
  8721.      MoveWindow (Horizontal,Vertical)
  8722.     
  8723.     Moves top window. If (Horizontal) is negative motion is left. If
  8724.     <Vertical> is negative, motion is up.
  8725.     
  8726.      Example:
  8727.        MoveWindow -3 4 ;moves window 3 spaces left and 4 down
  8728.     
  8729.     Category: Display
  8730.     
  8731.     
  8732.      MS-DOS (Registers)
  8733.     
  8734.     MS-DOS calls the interrupt 21h system call using values passed in an
  8735.     array of 10 numbers. The array is set up using predefined Qualifiers
  8736.     that represent the registers that are passed. These qualifiers are:
  8737.     
  8738.      AX BX CX DX DI SI DS ES BP FL
  8739.     
  8740.      Example: Get Current Drive
  8741.        var Reg
  8742.        Reg.AX = $1900
  8743.        MS-DOS`(Reg)
  8744.        Writeln Char(LowWord(Reg.AX) + 1) ':'     ;writes C:
  8745.     
  8746.     See Also: Intr
  8747.     
  8748.     Category: System
  8749.     
  8750.  
  8751.     Computer Tyme * MarxMenu * Users Manual                 Page #147
  8752.     -----------------------------------------------------------------
  8753.     
  8754.      MxCmd : String
  8755.     
  8756.     This is an internal string variable that is written to the environment
  8757.     variable MXCMD. This variable can be written to control what MarxMenu
  8758.     will write to the Shell Environment. If this variable is written to, it
  8759.     overrides anything that MarxMenu automatically writes.
  8760.     
  8761.      Example:
  8762.        OnKey 'A'
  8763.          |MxCmd = 'SHUTDOWN.BAT'
  8764.          |ExitMenu
  8765.     
  8766.     Category: Environment String Execution
  8767.     
  8768.     
  8769.      NamePart (String) : String
  8770.     
  8771.     Returns the name part of a file name.
  8772.     
  8773.      Example:
  8774.        NamePart ('C:\MARX\MARXMENU.EXE') ;returns MARXMENU
  8775.     
  8776.     See Also: Extension PathPart FilePart
  8777.     
  8778.     Category: String
  8779.     
  8780.     
  8781.      NetworkVersion : Boolean
  8782.     
  8783.     Returns true if you are running the network version of MarxMenu.
  8784.     
  8785.     Category: Misc
  8786.     
  8787.     
  8788.      NextWord (String) : String
  8789.     
  8790.     This command returns the next logical word of a string variable and
  8791.     removes the string from the original string.
  8792.     
  8793.      Example:
  8794.        StringA = 'one two three'
  8795.        StringB = NextWord(StringA)
  8796.     
  8797.        StringB contains 'one'
  8798.        StringA contains 'two three'
  8799.     
  8800.     Category: String
  8801.     
  8802.  
  8803.     Computer Tyme * MarxMenu * Users Manual                 Page #148
  8804.     -----------------------------------------------------------------
  8805.     
  8806.      Nil
  8807.     
  8808.     Nil returns a zero or empty value for any type data. As a boolean Nil
  8809.     returns False. As a number Nil returns 0. As a string, Nil returns an
  8810.     empty string.
  8811.     
  8812.     Category: Constants
  8813.     
  8814.     
  8815.      NoBoxBorder
  8816.     
  8817.     Use this command if you don't want a border around the menus.
  8818.     
  8819.     See Also: SingleLineBox DoubleLineBox BlockBox CustomBox
  8820.     
  8821.     Category: Display
  8822.     
  8823.     
  8824.      NoExit
  8825.     
  8826.     Prevents ESC key from allowing you to exit menu. To exit, you must
  8827.     execute the ExitMenu command. This could be password protected.
  8828.     
  8829.     See Also: ExitMenu
  8830.     
  8831.     Category: Execution
  8832.     
  8833.     
  8834.      Not : Operator
  8835.     
  8836.     Returns logical Not if operators are boolean; or bitwise Not if
  8837.     operators are numeric.
  8838.     
  8839.      Example:
  8840.        if Not ExistDir('C:\MARX') then Writeln 'Marx not Installed!'
  8841.        Not(0) = -1
  8842.     
  8843.     See Also: And Or Xor
  8844.     
  8845.     Category: Math Boolean
  8846.     
  8847.     
  8848.      NotesLeft : Num
  8849.     
  8850.     NotesLeft returns the number of notes left in the music buffer to play.
  8851.     The music buffer is self-adjusting and can store days worth of music.
  8852.     
  8853.     Category: Music
  8854.     
  8855.  
  8856.     Computer Tyme * MarxMenu * Users Manual                 Page #149
  8857.     -----------------------------------------------------------------
  8858.     
  8859.      NotesPlayed : Num
  8860.     
  8861.     Returns the number of notes played. If NotesLeft ever reaches 0,
  8862.     NotesPlayed also is set to 0.
  8863.     
  8864.     Category: Music
  8865.     
  8866.     
  8867.      NovAccountExpDate (UserName) : Date
  8868.     
  8869.     Returns the Novell account expiration date. You must be logged in to be
  8870.     able to read this.
  8871.     
  8872.      Example:
  8873.        DaysToExpire = NovAccountExpDate(UserName) - Today / SecondsInDay
  8874.     
  8875.     Category: Bindery Time
  8876.     
  8877.     
  8878.      NovAddUserToGroup (User,Group)
  8879.     
  8880.     Adds a user to a group and updates GROUPS_I'M_IN, GROUP_MEMBERS, and
  8881.     SECURITY_EQUALS properties.
  8882.     
  8883.      Example:
  8884.        NovAddUserToGroup ('MARC','EVERYONE')
  8885.     
  8886.     See Also: NovRemoveUserFromGroup
  8887.     
  8888.     Category: Bindery
  8889.     
  8890.     
  8891.      NovAddToSet (Obj,Prop,ObjType,MemberObj,MemberType)
  8892.     
  8893.     Adds an object to a property that is a set property.
  8894.     
  8895.      Example: Add a user to a group
  8896.        NovAddToSet(Group,'GROUP_MEMBERS',2,User,1)
  8897.        NovAddToSet(User,"GROUPS_I'M_IN",1,Group,2)
  8898.        NovAddToSet(User,'SECURITY_EQUALS',1,Group,2)
  8899.     
  8900.     See Also: NovDeleteFromSet NovSetProperty
  8901.     
  8902.     Category: Bindery
  8903.     
  8904.     
  8905.      NovAttach (Server)
  8906.     
  8907.     NovAttach is used to create a software link between you and a server,
  8908.     usually a second server. It must be followed by a NovLogin command to
  8909.     log you into the server if you want to do anything useful there.
  8910.     
  8911.  
  8912.     Computer Tyme * MarxMenu * Users Manual                 Page #150
  8913.     -----------------------------------------------------------------
  8914.     
  8915.      Example:
  8916.        NovAttach 'TYME'
  8917.     
  8918.     See Also: NovDetach
  8919.     
  8920.     Category: Novell
  8921.     
  8922.     
  8923.      NovAttachedServers (Array)
  8924.     
  8925.     Returns a list of servers you are already attached to.
  8926.     
  8927.      Example:
  8928.        var Servers
  8929.        NovAttachedServers(Servers)
  8930.        Loop Servers
  8931.           Writeln Servers[LoopIndex]
  8932.        EndLoop
  8933.     
  8934.     See Also: NovServers
  8935.     
  8936.     Category: Novell Array
  8937.     
  8938.     
  8939.      NovAutoDetach (On/Off)
  8940.     
  8941.     When using MarxMenu to log into a Novell network, MarxMenu will detach
  8942.     from the file server, if NovAutoDetach is on, when the screen blanker
  8943.     kicks in, and reattach when the screen is restored. This keeps the
  8944.     workstation from tying up a connection number while waiting to log in.
  8945.     If you want to use a workstation as a print server without being logged
  8946.     in you will want to set this to off.
  8947.     
  8948.     Default is on.
  8949.     
  8950.     Category: Novell
  8951.     
  8952.     
  8953.      NovBinderyAccess : Number
  8954.     
  8955.     NovBinderyAccess returns the users bindery access level.
  8956.     
  8957.      0 - Not logged in.
  8958.      1 - Logged in.
  8959.      2 - Object Access.
  8960.      3 - Supervisor Access.
  8961.     
  8962.     Category: Bindery
  8963.     
  8964.  
  8965.     Computer Tyme * MarxMenu * Users Manual                 Page #151
  8966.     -----------------------------------------------------------------
  8967.     
  8968.      NovBroadcastMode (Mode)
  8969.     
  8970.     This reads or sets the message broadcast mode.
  8971.     
  8972.      Example:
  8973.        Writeln NovBroadcastMode
  8974.        NovBroadcastMode = 3
  8975.     
  8976.      Modes:
  8977.        0 - All Messages, same as running CastOn
  8978.        1 - Server messages only, same as running CastOff
  8979.        2 - Same as 0 but user has to poll server for messages
  8980.        3 - Same as 1 but user has to poll server for messages
  8981.     
  8982.     See Also: NovSendMessage NovGetMessage
  8983.     
  8984.     Category: Novell
  8985.     
  8986.     
  8987.      NovCaptureCopies (Port) : Number
  8988.     
  8989.     NovCaptureCopies reads or sets the number of copies to print for a
  8990.     particular port.
  8991.     
  8992.      Example:
  8993.        NovCaptureCopies (2) = 5      ;Sets LPT2 to print 5 copies
  8994.        Writeln NovCaptureCopies (2)  ;displays the copies setting on LPT2
  8995.     
  8996.     See Also: NovCaptureQueue
  8997.     
  8998.     Category: Novell Printer
  8999.     
  9000.     
  9001.      NovCaptureFF (Port) On/Off
  9002.     
  9003.     NovCaptureFF reads or sets the printer Form Feed function of a
  9004.     particular port.
  9005.     
  9006.      Example:
  9007.        NovCaptureFF (2) On       ;Sets LPT2 Form Feed to On
  9008.        Writeln NovCaptureFF (2)  ;displays the Form Feed setting on LPT2
  9009.     
  9010.     See Also: NovCaptureQueue
  9011.     
  9012.     Category: Novell Printer
  9013.     
  9014.  
  9015.     Computer Tyme * MarxMenu * Users Manual                 Page #152
  9016.     -----------------------------------------------------------------
  9017.     
  9018.      NovCaptureFile (Port) File
  9019.     
  9020.     This command is used to capture the output from an LPT port to a
  9021.     specified file. If output is set to an empty string then this command
  9022.     performs the same function as an endcapture.
  9023.     
  9024.      Example:
  9025.        NovCaptureFile (1) = "PRINTER.TXT"   ;Captures LPT1 output to File.
  9026.        NovCaptureFile (1) = ""              ;Ends Capture of Port.
  9027.     
  9028.     See Also: NovCaptureQueue
  9029.     
  9030.     Category: Novell Printer
  9031.     
  9032.     
  9033.      NovCaptureFlush (Port)
  9034.     
  9035.     This commands flushes any data present in a Netware Print queue to
  9036.     the printer.
  9037.     
  9038.      Example:
  9039.        NovCaptureFlush (2)    ;Flush any data in queue on port 2
  9040.     
  9041.     See Also: NovCaptureQueue
  9042.     
  9043.     Category: Novell Printer
  9044.     
  9045.     
  9046.      NovCaptureForm (Port) : Number
  9047.     
  9048.     NovCaptureForm reads or sets the printer form of a particular port.
  9049.     
  9050.      Example:
  9051.        NovCaptureForm (2) = 3      ;Sets LPT2 to form 3
  9052.        Writeln NovCaptureForm (2)  ;displays the form setting on LPT2
  9053.     
  9054.     See Also: NovCaptureQueue
  9055.     
  9056.     Category: Novell Printer
  9057.     
  9058.     
  9059.      NovCaptureQueue (Port)
  9060.     
  9061.     Returns the name of the queue that the port is being captured to. A nul
  9062.     string indicates capturing is not active. This command can also be used
  9063.     to start capturing and set the queue to capture. A server can also be
  9064.     specified.
  9065.     
  9066.      Example:
  9067.        Writeln NovCaptureQueue (2)    ;shows capture queue for LPT2
  9068.        NovCaptureQueue (2) = 'LASER'  ;captures LPT2 to server Laser Printer
  9069.        NovCaptureQueue (2) = 'TYME/LASER'  ;specifies server TYME
  9070.        NovCaptureQueue (2) = ''       ;End Capture on LPT2
  9071.     
  9072.  
  9073.     Computer Tyme * MarxMenu * Users Manual                 Page #153
  9074.     -----------------------------------------------------------------
  9075.     
  9076.     Category: Novell Printer
  9077.     
  9078.     
  9079.      NovCaptureReset (Port) : String
  9080.     
  9081.     NovCaptureReset can read or set the reset string for a print queue.
  9082.     
  9083.      Example:
  9084.        NovCaptureReset (1) = Esc + char($15)
  9085.        Writeln NovCaptureReset (1) ;reads the capture setup string
  9086.     
  9087.     See Also: NovCaptureSetup
  9088.     
  9089.     Category: Novell Printer
  9090.     
  9091.     
  9092.      NovCaptureSetup (Port) : String
  9093.     
  9094.     NovCaptureSetup can read or set the setup string for a print queue.
  9095.     
  9096.      Example:
  9097.        NovCaptureSetup (1) = Esc + char($15)
  9098.        Writeln NovCaptureSetup (1) ;reads the capture setup string
  9099.     
  9100.     See Also: NovCaptureReset
  9101.     
  9102.     Category: Novell Printer
  9103.     
  9104.     
  9105.      NovCaptureTabSize (Port) : number
  9106.     
  9107.     NovCaptureTabSize reads or sets the printer TabSize of a particular
  9108.     port. Range is 1 - 18.
  9109.     
  9110.      Example:
  9111.        NovCaptureTabSize (2) = 8       ;Sets LPT2 TabSize to 8 spaces
  9112.        Writeln NovCaptureTabSize (2)   ;displays the TabSize setting on LPT2
  9113.     
  9114.     See Also: NovCaptureQueue
  9115.     
  9116.     Category: Novell Printer
  9117.     8
  9118.     
  9119.      NovCaptureTimeOut (Port) : number
  9120.     
  9121.     NovCaptureTimeOut reads or sets the printer TimeOut of a particular
  9122.     port.
  9123.     
  9124.      Example:
  9125.        NovCaptureTimeOut (2) = 10      ;Sets LPT2 to 10 second TimeOut
  9126.        Writeln NovCaptureTimeOut (2)   ;displays the TimeOut setting on LPT2
  9127.     
  9128.  
  9129.     Computer Tyme * MarxMenu * Users Manual                 Page #154
  9130.     -----------------------------------------------------------------
  9131.     
  9132.     See Also: NovCaptureQueue
  9133.     
  9134.     Category: Novell Printer
  9135.     
  9136.     
  9137.      NovCaptureUseBanner (Port)
  9138.     
  9139.     This reads or sets whether or not a print banner is used.
  9140.     
  9141.      Example:
  9142.        Writeln NovCaptureUseBanner (2)  ;displays if LPT2 is using a banner
  9143.        NovCaptureBanner (2) = On        ;sets banner to on for LPT2
  9144.     
  9145.     See Also: NovCaptureQueue
  9146.     
  9147.     Category: Novell Printer
  9148.     
  9149.     
  9150.      NovChangePassword (OldPassword,NewPassword)
  9151.     
  9152.     Changes the Novell users password from OldPassword to NewPassword.
  9153.     
  9154.      Example:
  9155.        NovChangePassword('OLDPASS','NEWPASS')
  9156.     
  9157.     Category: Novell
  9158.     
  9159.     
  9160.      NovCleanVolumeName (String) : String
  9161.     
  9162.     Returns a string containing the server and volume name of a file name or
  9163.     directory.
  9164.     
  9165.      Example:
  9166.        Writeln NovCleanVolumeName('L:')   ;Returns 'MARX/SYS:LOGIN'
  9167.     
  9168.     See Also: CleanFileName TrueName
  9169.     
  9170.     Category: Novell
  9171.     
  9172.     
  9173.      NovClearConnection (Connection Number)
  9174.     
  9175.     Disconnects a specific connection number from the server. Requires
  9176.     console operator rights to use this command.
  9177.     
  9178.      Example:
  9179.        NovClearConnection 2
  9180.     
  9181.     Category: Novell
  9182.     
  9183.  
  9184.     Computer Tyme * MarxMenu * Users Manual                 Page #155
  9185.     -----------------------------------------------------------------
  9186.     
  9187.      NovCloseBindery
  9188.     
  9189.     Closes the Novell bindery for access.
  9190.     
  9191.     See Also: NovOpenBindery
  9192.     
  9193.     Category: Bindery
  9194.     
  9195.     
  9196.      NovCloseSemaphore (Name)
  9197.     
  9198.     This closes semaphore Name. If there are no other users using this
  9199.     semaphore, it is deleted.
  9200.     
  9201.      Example:
  9202.        NovCloseSemaphore 'LOTUS'
  9203.     
  9204.     Category: Novell
  9205.     
  9206.     
  9207.      NovConnection (ServerName) : Number
  9208.     
  9209.     This returns your workstation's logical connection number to the server
  9210.     specified by ServerName. The ServerName parameter is optional and if not
  9211.     specified then the connection number returned is the connection number
  9212.     on the default server. A zero indicates that you are not connected to
  9213.     any servers.
  9214.     
  9215.      Example:
  9216.        Var Serv1,Serv2
  9217.        Serv1 = 'TYME'
  9218.        Serv2 = 'TSS'
  9219.        Writeln "I'm Connection " NovConnection(Serv1) " on Server "+Serv1
  9220.        Writeln "I'm Connection " NovConnection(Serv2) " on Server "+Serv2
  9221.     
  9222.     Category: Novell
  9223.     
  9224.     
  9225.      NovConnectionsInUse : Number
  9226.     
  9227.     Returns the number of connections in use.
  9228.     
  9229.      Example:
  9230.        Writeln 'There are ' NovConnections ' connections in use.'
  9231.     
  9232.     Category: Novell
  9233.     
  9234.  
  9235.     Computer Tyme * MarxMenu * Users Manual                 Page #156
  9236.     -----------------------------------------------------------------
  9237.     
  9238.      NovConsoleOperator : Boolean
  9239.     
  9240.     This returns true if the user has Console Operator privileges. This can
  9241.     come in handy when you are trying to determine who gets access to the
  9242.     command line.
  9243.     
  9244.      Example:
  9245.        OnKey Esc
  9246.          |if NovConsoleOperator
  9247.          |   ExitMenu
  9248.          |endif
  9249.     
  9250.     Category: Novell
  9251.     
  9252.     
  9253.      NovCreateObject (Name, ObjectType)
  9254.     
  9255.     Creates a bindery object of a specific object type. If NovStaticObject
  9256.     is set to true, then the object will be permanent unless it is deleted.
  9257.     If set to false, then the object will be automatically deleted if the
  9258.     file server is rebooted.
  9259.     
  9260.      Example:
  9261.        NovStaticObject Off              ;make property dynamic
  9262.        NovObjectSecurity $13            ;logged in read, supervisor write
  9263.        NovCreateObject ('MARXMENU',600) ;create the property
  9264.     
  9265.     NovObjectSecurity controls who can access the object. The default
  9266.     security is $11 which allows anyone logged into the network to access
  9267.     the object for both read and write.
  9268.     
  9269.     See Also: NovStaticObject NovObjectSecurity NovDeleteObject
  9270.     
  9271.     Category: Bindery
  9272.     
  9273.     
  9274.      NovCreateProperty (Object, Prop, ObjType)
  9275.     
  9276.     Creates a property on the object. The security of the property is
  9277.     controlled by setting the variable NovPropertySecurity. You can also
  9278.     control if the property is an item property or a set property. This is
  9279.     done by setting NovSetProperty to True or False.
  9280.     
  9281.     If NovStaticProperty is true then the property will remain until someone
  9282.     deletes it. If it is not static (dynamic) then it will be deleted if the
  9283.     server is rebooted.
  9284.     
  9285.     A set property contains a list of objects. An item property contains a
  9286.     value up to 128 bytes long. The value can be anything.
  9287.     
  9288.  
  9289.     Computer Tyme * MarxMenu * Users Manual                 Page #157
  9290.     -----------------------------------------------------------------
  9291.     
  9292.      Example:
  9293.        NovSetProperty On             ;use set property
  9294.        NovStaticProperty Off         ;make property dynamic
  9295.        NovPropertySecurity $13       ;logged in read, supervisor write
  9296.        NovCreateProperty ('MARXMENU','USERS',600) ;create the property
  9297.     
  9298.     See Also: NovStaticProperty NovPropertySecurity NovDeleteProperty
  9299.     
  9300.     Category: Bindery
  9301.     
  9302.     
  9303.      NovDefaultServer : String
  9304.     
  9305.     Returns the name of the default file server.
  9306.     
  9307.      Example:
  9308.        Writeln NovDefaultServer
  9309.     
  9310.     Category: Novell
  9311.     
  9312.     
  9313.      NovDeleteFromSet (Obj,Prop,ObjType,MemberObject,MemberType)
  9314.     
  9315.     Deletes an object from a property that is a set property.
  9316.     
  9317.      Example:
  9318.        To Remove a user to a group:
  9319.     
  9320.        NovDeleteFromSet(Group,'GROUP_MEMBERS',2,User,1)
  9321.        NovDeleteFromSet(User,"GROUPS_I'M_IN",1,Group,2)
  9322.        NovDeleteFromSet(User,'SECURITY_EQUALS',1,Group,2)
  9323.     
  9324.     See Also: NovAddToSet NovSetProperty
  9325.     
  9326.     Category: Bindery
  9327.     
  9328.     
  9329.      NovDeleteObject (Object,Type)
  9330.     
  9331.     Deletes an object from the bindery.
  9332.     
  9333.      Example:
  9334.        NovDeleteObject('JOE',1)
  9335.     
  9336.     Category: Bindery
  9337.     
  9338.  
  9339.     Computer Tyme * MarxMenu * Users Manual                 Page #158
  9340.     -----------------------------------------------------------------
  9341.     
  9342.      NovDeleteProperty (Obj,Prop,Type)
  9343.     
  9344.     NovDeleteProperty deletes a property from an object.
  9345.     
  9346.      Example:
  9347.        NovDeleteProperty('TEST','WASTE',2)
  9348.     
  9349.     Category: Bindery
  9350.     
  9351.     
  9352.      NovDetach (Server)
  9353.     
  9354.     This is used to drop the connection to a server. It also logs you off.
  9355.     
  9356.      Example:
  9357.        NovDetach 'TYME'
  9358.     
  9359.     See Also: NovAttach
  9360.     
  9361.     Category: Novell
  9362.     
  9363.     
  9364.      NovDownServer
  9365.     
  9366.     Takes the default file server down if there are no files open. You must
  9367.     be supervisor equivalent to user this command.
  9368.     
  9369.     See Also: NovForceDownServer
  9370.     
  9371.     Category: Novell
  9372.     
  9373.     
  9374.      NovEndCapture (Port)
  9375.     
  9376.     Ends printer capture for LPT ports.
  9377.     
  9378.      Example:
  9379.         NovEndCapture (1)  ;cancels LPT1 capture
  9380.     
  9381.     See Also: NovCaptureQueue
  9382.     
  9383.     Category: Novell Printer
  9384.     
  9385.     
  9386.      NovForceDownServer
  9387.     
  9388.     Takes the default file server down regardless of open files.  You must be
  9389.     supervisor equivalent to use this command.
  9390.     
  9391.     See Also: NovDownServer
  9392.     
  9393.     Category: Novell
  9394.     
  9395.  
  9396.     Computer Tyme * MarxMenu * Users Manual                 Page #159
  9397.     -----------------------------------------------------------------
  9398.     
  9399.      NovFreeDirSlots (Path) : Number
  9400.     
  9401.     Returns the number of free directory slots for this volume.
  9402.     
  9403.      Example:
  9404.        Writeln NovFreeDirSlots 'SYS:'
  9405.        Writeln NovFreeDirSlots 'F:'
  9406.     
  9407.     See Also: NovTotalDirSlots
  9408.     
  9409.     Category: Novell
  9410.     
  9411.     
  9412.      NovFreeVolumeSpace (Path) : Number
  9413.     
  9414.     Returns the free file space of the volume in bytes.
  9415.     
  9416.      Example:
  9417.        Writeln NovFreeVolumeSpace 'SYS:'
  9418.        Writeln NovFreeVolumeSpace 'F:'
  9419.     
  9420.     See Also: NovTotalVolumeSpace NovUsedVolumeSpace
  9421.     
  9422.     Category: Novell
  9423.     
  9424.     
  9425.      NovFullName (User)
  9426.     
  9427.     Returns the Full Name of the user as set by Syscon. If NovFullName is
  9428.     used without a parameter then MyLoginName is assumed.
  9429.     
  9430.      Example:
  9431.        Writeln NovFullName 'MARC'  ;Writes Marc Perkel
  9432.     
  9433.     See Also: NovLoginName
  9434.     
  9435.     Category: Bindery
  9436.     
  9437.     
  9438.      NovGetConnections (Array,Name,Type)
  9439.     
  9440.     NovGetConnections return an array of connection numbers that a specified
  9441.     user or other object is attached to. For users use type 1.
  9442.     
  9443.      Example:
  9444.        var Connections
  9445.        NovGetConnections(Connections,'VICKI',1)
  9446.        Loop Connections
  9447.           NovSendMessage('The Princess Called!',Connections[LoopIndex])
  9448.        EndLoop
  9449.     
  9450.  
  9451.     Computer Tyme * MarxMenu * Users Manual                 Page #160
  9452.     -----------------------------------------------------------------
  9453.     
  9454.     Category: Bindery
  9455.     
  9456.     
  9457.      NovGetMessage : String
  9458.     
  9459.     When in broadcast mode 2 or 3 this polls the server for stored messages
  9460.     and returns them if found.
  9461.     
  9462.      Example:
  9463.        NovBroadcastMode = 3
  9464.        Writeln NovGetMessage
  9465.     
  9466.     See Also: NovSendMessage NovBroadcastMode
  9467.     
  9468.     Category: Novell
  9469.     
  9470.     
  9471.      NovGraceLoginReset (User) : Num
  9472.     
  9473.     Returns the number of grace logins that Novell resets when the user
  9474.     changes his password.
  9475.     
  9476.      Example:
  9477.        Writeln NovGraceLoginReset (NovMyLoginName)
  9478.     
  9479.     If the User parameter is not included, MarxMenu will assume the current
  9480.     user.
  9481.     
  9482.     You can also set the grace login reset as follows:
  9483.     
  9484.      NovGraceLoginReset = 5
  9485.     
  9486.     See Also: NovGraceLogins
  9487.     
  9488.     Category: Bindery
  9489.     
  9490.     
  9491.      NovGraceLogins (User) : Num
  9492.     
  9493.     Returns the number of grace logins the user has left.
  9494.     
  9495.      Example:
  9496.        Writeln 'You have ' NovGraceLogins (NovMyLoginName) ' left!'
  9497.     
  9498.     If the User parameter is not included, MarxMenu will assume the current
  9499.     user.
  9500.     
  9501.     You can also set the grace logins as follows:
  9502.     
  9503.      NovGraceLogins = 5
  9504.     
  9505.  
  9506.     Computer Tyme * MarxMenu * Users Manual                 Page #161
  9507.     -----------------------------------------------------------------
  9508.     
  9509.     See Also: NovPasswordExpDate NovGraceLoginReset
  9510.     
  9511.     Category: Bindery
  9512.     
  9513.     
  9514.      NovGroupMembers (Group,Array)
  9515.     
  9516.     This reads all the members of Group and puts them into an array.
  9517.     
  9518.      Example:
  9519.        var Members
  9520.        NovGroupMembers ('EVERYONE',Members)
  9521.        Loop Members
  9522.           Writeln Members[LoopIndex]
  9523.        EndLoop
  9524.     
  9525.     Category: Bindery Array
  9526.     
  9527.     
  9528.      NovGroups (Array)
  9529.     
  9530.     Fills array with list of all groups.
  9531.     
  9532.      Example:
  9533.        var Groups
  9534.        NovGroups (Groups)
  9535.        Loop Groups
  9536.           Writeln Groups[LoopIndex]
  9537.        EndLoop
  9538.     
  9539.     See Also: NovUsersLoggedIn NovUsers NovPrintQueues NovServers
  9540.     
  9541.     Category: Bindery
  9542.     
  9543.     
  9544.      NovInGroup (Group) : Boolean
  9545.     
  9546.     Returns true if you are in the group.
  9547.     
  9548.      Example:
  9549.        If NovInGroup ('PAYROLL') then Writeln 'Accounting'
  9550.     
  9551.     Category: Bindery
  9552.     
  9553.     
  9554.      NovLastLoginDate (User) : Date
  9555.     
  9556.     Returns the date the user last logged in.
  9557.     
  9558.      Example:
  9559.        DaysSinceLogin = NovLastLoginDate(UserName) - Today / SecondsInDay
  9560.     
  9561.  
  9562.     Computer Tyme * MarxMenu * Users Manual                 Page #162
  9563.     -----------------------------------------------------------------
  9564.     
  9565.     If the User parameter is not included, MarxMenu will assume the current
  9566.     user.
  9567.     
  9568.     Category: Bindery Time
  9569.     
  9570.     
  9571.      NovLogin (Name,Password)
  9572.     
  9573.     This logs you into a file server. It is different than the Novell's
  9574.     login program in that it doesn't execute any login scripts. It merely
  9575.     gets you in. You can include the preferred server with the name.
  9576.     
  9577.      Example:
  9578.        NovLogin ('MARC','PASSWORD')
  9579.        NovLogin ('TYME/MARC','PASSWORD')
  9580.     
  9581.     NovLogin will automatically attach to the file server for you and
  9582.     preserve all default and preferred server settings.
  9583.     
  9584.     The variable NovResult is set to 0 or 223 if successful. The 223 result
  9585.     indicated a grace login.
  9586.     
  9587.     If you are using Netware 3, MarxMenu shells a program named SUBLOGIN.EXE
  9588.     which does encrypted passwords. This program needs to be on the search
  9589.     path. If you are using MarxMenu to log into the network the you will
  9590.     need a copy of SUBLOGIN in the LOGIN directory.
  9591.     
  9592.     If you don't use SUBLOGIN you will have to go to the server console and
  9593.     type:
  9594.     
  9595.      SET ALLOW UNENCRYPTED PASSWORDS = ON
  9596.     
  9597.     See Also: NovDetach
  9598.     
  9599.     Category: Novell
  9600.     
  9601.     
  9602.      NovLoginName (Connection) : String
  9603.     
  9604.     This returns the login name of the user at any specified connection.
  9605.     This can also be used to see who else is on the network. If no
  9606.     connection is specified, the current connection is assumed.
  9607.     
  9608.      Example:
  9609.        Writeln NovLoginName       ;name of user on this connection
  9610.        Writeln NovLoginName (2)   ;name of user on connection 2
  9611.     
  9612.     See Also: NovFullName
  9613.     
  9614.     Category: Bindery
  9615.     
  9616.  
  9617.     Computer Tyme * MarxMenu * Users Manual                 Page #163
  9618.     -----------------------------------------------------------------
  9619.     
  9620.      NovLogout
  9621.     
  9622.     This logs you off the server. Warning! Make sure that you are running
  9623.     MarxMenu from a local drive and not the server you are logging out of.
  9624.     MarxMenu needs access to overlays within MARXMENU.EXE and a Logout can
  9625.     cut off access. This command automatically runs FixPath.
  9626.     
  9627.     See Also: FixPath Logoff LogoffTime
  9628.     
  9629.     Category: Novell Vines
  9630.     
  9631.     
  9632.      NovMapDrive (Drive,Directory)
  9633.     
  9634.     This will map a drive letter to a directory like the Novell MAP
  9635.     command does. You may specify volume names and server names.
  9636.     
  9637.      Example:
  9638.        NovMapDrive ('J','TYME2/SYS:PUBLIC\DOS')
  9639.     
  9640.     Mapping a drive to a nul string ('') deletes the drive map.
  9641.     
  9642.     See Also: NovMapRoot
  9643.     
  9644.     Category: Novell
  9645.     
  9646.     
  9647.      NovMapRoot (Drive,Path)
  9648.     
  9649.     NovMapRoot works like Novell's MAP ROOT command. It allows you to map a
  9650.     drive letter to a subdirectory and make it look like the root directory
  9651.     of that drive. You may specify volume names and server names.
  9652.     
  9653.      Example:
  9654.        NovMapRoot('P','TYME/SYS:PUBLIC')
  9655.     
  9656.     P:\ is the same as the TYME/SYS:PUBLIC directory
  9657.     
  9658.     See Also: NovMapDrive
  9659.     
  9660.     Category: Novell
  9661.     
  9662.     
  9663.      NovMaxConnections : Number
  9664.     
  9665.     Returns the maximum number of connections that your Netware will allow.
  9666.     
  9667.     Category: Novell
  9668.     
  9669.  
  9670.     Computer Tyme * MarxMenu * Users Manual                 Page #164
  9671.     -----------------------------------------------------------------
  9672.     
  9673.      NovMinPasswordLength (User) : Num
  9674.     
  9675.     Returns the minimum length of the password that Novell will accept for a
  9676.     new password.
  9677.     
  9678.      Example:
  9679.        Writeln NovGraceLoginReset (NovMyLoginName)
  9680.     
  9681.     If the User parameter is not included, MarxMenu will assume the current
  9682.     user.
  9683.     
  9684.     Category: Bindery
  9685.     
  9686.     
  9687.      NovMyLoginName : String
  9688.     
  9689.     This returns the login name of the user.
  9690.     
  9691.      Example:
  9692.        Writeln NovMyLoginName
  9693.     
  9694.     Category: Bindery
  9695.     
  9696.     
  9697.      NovMyPassword (Password) : Boolean
  9698.     
  9699.     Novell won't let you read the password, but it will let you guess and
  9700.     tell you if you're right. This routine returns true if the password
  9701.     passed is the correct password.
  9702.     
  9703.      Example"
  9704.        var Pass
  9705.        Pass = Readln
  9706.        if NovMyPassword (Pass)
  9707.           <Do Something>
  9708.        else
  9709.           Writeln 'Bad Password!'
  9710.        endif
  9711.     
  9712.     Category: Bindery
  9713.     
  9714.     
  9715.      NovMyPrintQueues (Array)
  9716.     
  9717.     Returns a list of all print queues that the user has access too.
  9718.     
  9719.      Example:
  9720.        var Queues
  9721.        NovMyPrintQueues (Queues)
  9722.        Loop Queues
  9723.           Writeln Queues[LoopIndex]
  9724.        EndLoop
  9725.     
  9726.  
  9727.     Computer Tyme * MarxMenu * Users Manual                 Page #165
  9728.     -----------------------------------------------------------------
  9729.     
  9730.     See Also: NovPrintQueues
  9731.     
  9732.     Category: Bindery Array
  9733.     
  9734.     
  9735.      NovObjectID (User) : String
  9736.     
  9737.     NovObjectID returns the users Novell object identification code. This is
  9738.     the same as the name of the users mail directory.
  9739.     
  9740.      Example:
  9741.        MailDir = 'F:\MAIL\' + NovObjectID (NovMyLoginName)
  9742.     
  9743.     Category: Bindery
  9744.     
  9745.     
  9746.      NovObjects (2D Array)
  9747.     
  9748.     NovObjects reads all objects from the bindery returning a 2 dimensional
  9749.     array containing all object names and object types.
  9750.     
  9751.      Example:
  9752.        NovObjects (X)
  9753.        Loop X
  9754.           Writeln X[LoopIndex,1] ' ' X[LoopIndex,2]
  9755.        EndLoop
  9756.     
  9757.      Common Object Types:
  9758.        1 - User
  9759.        2 - Group
  9760.        3 - Print Queue
  9761.        4 - File Server
  9762.        5 - Job Server
  9763.        6 - Gateway
  9764.        7 - Print Server
  9765.     
  9766.     See Also: NovScanProperties NovPropertyValues
  9767.     
  9768.     Category: Bindery Array
  9769.     
  9770.     
  9771.      NovObjectSecurity : Number
  9772.     
  9773.     NovObjectSecurity is used when objects are created to determine who can
  9774.     read or write the object. The number is one byte. The upper 4 bits
  9775.     controls who can read the object, the lower 4 bits control who can write
  9776.     to the object.
  9777.     
  9778.       0000 Anyone
  9779.       0001 Logged In
  9780.       0010 Only your Object
  9781.       0011 Supervisor
  9782.       0100 Netware Itself
  9783.     
  9784.  
  9785.     Computer Tyme * MarxMenu * Users Manual                 Page #166
  9786.     -----------------------------------------------------------------
  9787.     
  9788.     The default is $11 (00010001) which is anyone logged in can read or
  9789.     write to the object.
  9790.     
  9791.     NovObjectSecurity can also read and set the security of an existing
  9792.     object.
  9793.     
  9794.      Example:
  9795.        NovObjectSecurity('MARXMENU',600) = $13
  9796.        Writeln NovObjectSecurity('MARXMENU',600)
  9797.     
  9798.     See Also: NovCreateObject NovStaticObject NovPropertySecurity
  9799.     
  9800.     Category: Bindery
  9801.     
  9802.     
  9803.      NovOpenBindery
  9804.     
  9805.     Opens the Novell bindery for access.
  9806.     
  9807.     See Also: NovCloseBindery
  9808.     
  9809.     Category: Bindery
  9810.     
  9811.     
  9812.      NovOpenSemaphore (Name,Value)
  9813.     
  9814.     This opens semaphore Name and assigns it an initial value. If the
  9815.     semaphore already exists, the value isn't changed. The number of
  9816.     semaphore users is increased by one if this user hasn't already opened
  9817.     this semaphore name.
  9818.     
  9819.      Example:
  9820.        NovOpenSemaphore ('LOTUS',0)
  9821.     
  9822.     See Also: NovCloseSemaphore NovSemaphoreUsers
  9823.     
  9824.     Category: Novell
  9825.     
  9826.     
  9827.      NovPasswordExpDate (UserName) : Date
  9828.     
  9829.     Returns the Novell password expiration date. You must be logged in to be
  9830.     able to read this.
  9831.     
  9832.      Example:
  9833.        DaysToExpire = NovPasswordExpDate(UserName) - Today / SecondsInDay
  9834.     
  9835.     See Also: NovGraceLogins
  9836.     
  9837.     Category: Bindery Time
  9838.     
  9839.  
  9840.     Computer Tyme * MarxMenu * Users Manual                 Page #167
  9841.     -----------------------------------------------------------------
  9842.     
  9843.      NovPreferredServer : String
  9844.     
  9845.     Returns the name of the preferred file server. This is set with the
  9846.     NovSetPreferredServer command.
  9847.     
  9848.     Normally the default server is controlled by the current directory. If a
  9849.     preferred server is set then this default is changed. Setting the
  9850.     preferred server to blank resets the default server. When MarxMenu
  9851.     terminates the Preferred server setting is terminated.
  9852.     
  9853.     Category: Novell
  9854.     
  9855.     
  9856.      NovPrimaryServer : String
  9857.     
  9858.     Returns the name of the primary file server. This is the one you first
  9859.     logged into.
  9860.     
  9861.     Category: Novell
  9862.     
  9863.     
  9864.      NovPrintQueues (Array)
  9865.     
  9866.     Fills array with list of all print Queues. The user might not have
  9867.     access rights to all these queues.
  9868.     
  9869.      Example:
  9870.        var Queues
  9871.        NovPrintQueues (Queues)
  9872.        Loop Queues
  9873.           Writeln Queues[LoopIndex]
  9874.        EndLoop
  9875.     
  9876.     See Also: NovMyPrintQueues NovUsersLoggedIn NovUsers
  9877.     See Also: NovGroups NovServers
  9878.     
  9879.     Category: Bindery Array Printer
  9880.     
  9881.     
  9882.      NovPropertySecurity : Number
  9883.     
  9884.     NovPropertySecurity is used when properties are created to determine who
  9885.     can read or write the property. The number is one byte. The upper 4 bits
  9886.     controls who can read the property, the lower 4 bits control who can
  9887.     write to the property.
  9888.     
  9889.       0000 Anyone
  9890.       0001 Logged In
  9891.       0010 Only your Object
  9892.       0011 Supervisor
  9893.       0100 Netware Itself
  9894.     
  9895.  
  9896.     Computer Tyme * MarxMenu * Users Manual                 Page #168
  9897.     -----------------------------------------------------------------
  9898.     
  9899.     The default is $11 (00010001) which is anyone logged in can read or
  9900.     write to the property.
  9901.     
  9902.     NovPropertySecurity can also read and set the security of an existing
  9903.     property.
  9904.     
  9905.      Example:
  9906.        NovPropertySecurity('MARXMENU','USERS',600) = $13
  9907.        Writeln NovPropertySecurity('MARXMENU','USERS',600)
  9908.     
  9909.     See Also: NovCreateProperty NovObjectSecurity NovSetProperty
  9910.     
  9911.     Category: Bindery
  9912.     
  9913.     
  9914.      NovPropertyValues (Array, Object, Prop, Type)
  9915.     
  9916.     Reads property values of object into an array. If the property is a Set
  9917.     property, then the names of the objects contained in the set are read.
  9918.     If the property is an Item property, then the property is read as an
  9919.     array of strings that are all 128 bytes in length. These strings will
  9920.     contain binary data.
  9921.     
  9922.      Example:       ;shows contents of bindery
  9923.        StandardIO
  9924.     
  9925.        Var Objects, Obj, Prop, Ty, Values
  9926.     
  9927.        Qualifier ObjName ObjType
  9928.     
  9929.        NovObjects (Objects)
  9930.     
  9931.        Loop Objects
  9932.           Obj = Objects[LoopIndex].ObjName
  9933.           Ty = Objects[LoopIndex].ObjType
  9934.           Writeln Obj ' --------- ' Ty
  9935.           NovScanProperties (Prop,Obj,Ty)
  9936.           Loop Prop
  9937.              Writeln '   ' Prop[LoopIndex]
  9938.              NovPropertyValues(Values,Obj,Prop[LoopIndex],Ty)
  9939.              Loop Values
  9940.                 Writeln '      ' Values[LoopIndex]
  9941.              EndLoop
  9942.           EndLoop
  9943.        EndLoop
  9944.     
  9945.     See Also: NovObjects NovScanProperties NovWritePropValue
  9946.     
  9947.     Category: Bindery Array
  9948.     
  9949.  
  9950.     Computer Tyme * MarxMenu * Users Manual                 Page #169
  9951.     -----------------------------------------------------------------
  9952.     
  9953.      NovReadGroups (User,Array)
  9954.     
  9955.     This reads all the groups that User belongs to and puts them into an
  9956.     array.
  9957.     
  9958.      Example:
  9959.        var Groups
  9960.        NovReadGroups ('VICKI',Groups)
  9961.        Loop Groups
  9962.           Writeln Groups[LoopIndex]
  9963.        EndLoop
  9964.     
  9965.     Category: Bindery Array
  9966.     
  9967.     
  9968.      NovReadSecurityEquals (Name,Array)
  9969.     
  9970.     This reads all the security equivalences that Name belongs to and puts
  9971.     them into an array. (This includes groups).
  9972.     
  9973.      Example:
  9974.        var SecEq
  9975.        NovReadSecurityEquals ('VICKI',SecEq)
  9976.        Loop SecEq
  9977.           Writeln SecEq[LoopIndex]
  9978.        EndLoop
  9979.     
  9980.     Category: Bindery Array
  9981.     
  9982.     
  9983.      NovRemoveUserFromGroup (User,Group)
  9984.     
  9985.     Removes a user to a group and updates GROUPS_I'M_IN, GROUP_MEMBERS, and
  9986.     SECURITY_EQUALS properties.  You must be supervisor equivalent in order
  9987.     to use this command.
  9988.     
  9989.      Example:
  9990.        NovRemoveUserFromGroup ('MARC','EVERYONE')
  9991.     
  9992.     See Also: NovAddUserToGroup
  9993.     
  9994.     Category: Bindery
  9995.     
  9996.     
  9997.      NovRenameObject (OldName, NewName, ObjType)
  9998.     
  9999.     Renames an object.
  10000.     
  10001.      Example:
  10002.        NovRenameObject('VICKY','VICKI',1)
  10003.          ;corrects serious spelling error
  10004.     
  10005.  
  10006.     Computer Tyme * MarxMenu * Users Manual                 Page #170
  10007.     -----------------------------------------------------------------
  10008.     
  10009.     Category: Bindery
  10010.     
  10011.     
  10012.      NovResult : Number
  10013.     
  10014.     NovResult is a variable like FileResult that returns the success status
  10015.     of the previous Novell system call. A zero generally indicates success.
  10016.     
  10017.     Category: Novell
  10018.     
  10019.     
  10020.      NovScanProperties (Array, Object, ObjType)
  10021.     
  10022.     NovScanProperties reads the properties (not the values) into an array.
  10023.     You also have to pass the object type.
  10024.     
  10025.      Novell Object Types:
  10026.        1 - User
  10027.        2 - Group
  10028.        3 - Print Queue
  10029.        4 - File Server
  10030.        5 - Job Server
  10031.        6 - Gateway
  10032.        7 - Print Server
  10033.     
  10034.      Example:
  10035.        var Properties
  10036.        NovScanProperties (Properties,NovMyLoginName,1)
  10037.     
  10038.        Loop NumberOfElements(Properties)
  10039.           Writeln(Properties[LoopIndex])
  10040.        EndLoop
  10041.     
  10042.     See Also: NovObjects NovPropertyValues
  10043.     
  10044.     Category: Bindery Array
  10045.     
  10046.     
  10047.      NovScanTrusteePaths (2D Array,ObjectName,ObjectType)
  10048.     
  10049.     Returns a 2 dimensional array containing the name of the trustee paths
  10050.     assigned to the object and the trustee access rights.
  10051.     
  10052.      Example:
  10053.        var X
  10054.        NovScanTrusteePaths (X,'MARC',1)
  10055.        Loop X
  10056.           Writeln X[LoopIndex,1] ' ' X[LoopIndex,2]
  10057.        EndLoop
  10058.     
  10059.     Category: Novell Array
  10060.     
  10061.  
  10062.     Computer Tyme * MarxMenu * Users Manual                 Page #171
  10063.     -----------------------------------------------------------------
  10064.     
  10065.      NovSecurityEquals (Security) : Boolean
  10066.     
  10067.     Returns True if user has the security equivalent of Security.
  10068.     
  10069.      Example:
  10070.        if NovSecurityEquals ('SUPERVISOR')
  10071.           Execute ('SYSCON')
  10072.        endif
  10073.     
  10074.     Category: Bindery
  10075.     
  10076.     
  10077.      NovSemaphoreTimeout
  10078.     
  10079.     This variable controls the amount of time (in 1/18 seconds) that
  10080.     MarxMenu will wait for the value of a semaphore to become not negative.
  10081.     The initial value is 50.
  10082.     
  10083.      Example:
  10084.        NovSemaphoreTimeout = 50
  10085.     
  10086.     See Also: NovWaitOnSemaphore NovSignalSemaphore
  10087.     
  10088.     Category: Novell
  10089.     
  10090.     
  10091.      NovSemaphoreUsers (Name) : Number
  10092.     
  10093.     This returns the number of users that have the semaphore open. This can
  10094.     be used for software metering. Read file METER.INC to use this feature.
  10095.     
  10096.      Example:
  10097.        if NovSemaphoreUsers ('LOTUS') > 5
  10098.           Writeln 'Sorry, all copies of LOTUS are in use.'
  10099.        endif
  10100.     
  10101.     Category: Novell
  10102.     
  10103.     
  10104.      NovSemaphoreValue (Name) : Number
  10105.     
  10106.     This returns the value of a semaphore. The value is initially set with
  10107.     NovOpenSemaphore and can be adjusted with NovSignalSemaphore or
  10108.     NovWaitOnSemaphore.
  10109.     
  10110.      Example:
  10111.        Writeln NamSemaphoreValue
  10112.     
  10113.     See Also: NovOpenSemaphore NovSignalSemaphore NovWaitOnSemaphore
  10114.     
  10115.     Category: Novell
  10116.     
  10117.  
  10118.     Computer Tyme * MarxMenu * Users Manual                 Page #172
  10119.     -----------------------------------------------------------------
  10120.     
  10121.      NovSendMessage (Message,Connection)
  10122.     
  10123.     Sends a message to the specified connection number just like the Novell
  10124.     SEND command.
  10125.     
  10126.      NovResults:
  10127.           0 - Successful
  10128.         252 - Buffer Full
  10129.         253 - Invalid Connection Number
  10130.         255 - Blocked (running CastOff)
  10131.     
  10132.     See Also: NovGetMessage NovBroadcastMode
  10133.     
  10134.     Category: Novell
  10135.     
  10136.     
  10137.      NovServerLogin (On/Off)
  10138.     
  10139.     Enables or disables logins to file server. This requires the user have
  10140.     Console Operator status to use this feature.
  10141.     
  10142.      Example:
  10143.        if NovConsoleOperator then NovServerLogin Off
  10144.     
  10145.     Category: Novell
  10146.     
  10147.     
  10148.      NovServers (Array)
  10149.     
  10150.     This command returns a string array of the file servers you are
  10151.     connected to.
  10152.     
  10153.      Example:
  10154.        var Servers
  10155.        NovServers(Servers)
  10156.        Loop Servers
  10157.           Writeln Servers[LoopIndex]
  10158.        EndLoop
  10159.     
  10160.     Category: Bindery Array
  10161.     
  10162.     
  10163.      NovServerTime : Time
  10164.     
  10165.     NovServerTime can read or set the date and time of a Novell file server.
  10166.     
  10167.      To read the server time:
  10168.         X = NovServerTime
  10169.     
  10170.      To set the server time:
  10171.         NovServerTime = X
  10172.     
  10173.  
  10174.     Computer Tyme * MarxMenu * Users Manual                 Page #173
  10175.     -----------------------------------------------------------------
  10176.     
  10177.     Category: Novell Time
  10178.     
  10179.     
  10180.      NovSetPreferredServer (Server)
  10181.     
  10182.     Sets the preferred file server. Passing a '' will switch you back to the
  10183.     default or primary file server.
  10184.     
  10185.     See Also: NovSetPrimaryServer NovPreferredServer
  10186.     
  10187.     Category: Novell
  10188.     
  10189.     
  10190.      NovSetPrimaryServer (Server)
  10191.     
  10192.     The primary file server is the one that executes your login scripts. It
  10193.     can also be set using the NovSetPrimaryServer command.
  10194.     
  10195.     See Also: NovSetPreferredServer NovPrimaryServer
  10196.     
  10197.     Category: Novell
  10198.     
  10199.     
  10200.      NovSetProperty (On/Off)
  10201.     
  10202.     NovSetProperty is a variable that controls if the property to be created
  10203.     is going to be a set property or an item property.
  10204.     
  10205.     A set property contains a list of objects. An item property contains a
  10206.     value up to 128 bytes long. The value can be anything.
  10207.     
  10208.     NovSetProperty can also be used to read if a property is an item or a
  10209.     set.
  10210.     
  10211.      Example:
  10212.        if NovSetProperty (Object,Property,ObjectType)
  10213.           NovPropertyValues(Values,Object,Property,ObjectType)
  10214.           Loop Values
  10215.              Writeln Values[LoopIndex]
  10216.           EndLoop
  10217.        endif
  10218.     
  10219.     See Also: NovPropertySecurity NovCreateProperty NovStaticProperty
  10220.     
  10221.     Category: Bindery
  10222.     
  10223.  
  10224.     Computer Tyme * MarxMenu * Users Manual                 Page #174
  10225.     -----------------------------------------------------------------
  10226.     
  10227.      NovShellVersion : String
  10228.     
  10229.     Returns the Novell shell version number.
  10230.     
  10231.     Category: Novell
  10232.     
  10233.     
  10234.      NovSignalSemaphore (Name)
  10235.     
  10236.     This increments the value of a semaphore. It is used to indicate that
  10237.     you are done with a resource and makes it available for the next user.
  10238.     
  10239.     See Also: NovOpenSemaphore NovWaitOnSemaphore
  10240.     
  10241.     Category: Novell
  10242.     
  10243.     
  10244.      NovStaticObject : Boolean
  10245.     
  10246.     This variable controls if objects created will be static or dynamic
  10247.     objects. Dynamic objects are deleted when the file server is rebooted.
  10248.     
  10249.     NovStaticObject can also be used to read if an object is static or not.
  10250.     
  10251.      Example:
  10252.        Writeln NovStaticObject('MARXMENU',600)  ;test for static object
  10253.     
  10254.     See Also: NovCreateObject NovObjectSecurity
  10255.     
  10256.     Category: Bindery
  10257.     
  10258.     
  10259.      NovStaticProperty : Boolean
  10260.     
  10261.     This variable controls if objects created will be static or dynamic
  10262.     objects. Dynamic objects are deleted when the file server is rebooted.
  10263.     
  10264.     NovStaticProperty can also be used to read if an property is static or
  10265.     not.
  10266.     
  10267.      Example:
  10268.        Writeln NovStaticProperty('MARXMENU','USERS',600)
  10269.     
  10270.     See Also: NovCreateProperty NovPropertySecurity
  10271.     
  10272.     Category: Bindery
  10273.     
  10274.  
  10275.     Computer Tyme * MarxMenu * Users Manual                 Page #175
  10276.     -----------------------------------------------------------------
  10277.     
  10278.      NovStationAddress (Connection) : String
  10279.     
  10280.     This returns the stations internetwork address at connection.
  10281.     
  10282.      Example:
  10283.        NovStationAddress (NovConnection)
  10284.           Returns the address of the users workstation.
  10285.     
  10286.        NovStationAddress (1)
  10287.           Returns the address of station 1.
  10288.     
  10289.        254:41 where 254 is the network number and 41 is the node number.
  10290.     
  10291.     The second parameter (Connection) is optional. If it is left out, the
  10292.     current connection is assumed.
  10293.     
  10294.      Example:
  10295.        NovStationAddress ;Returns the address of the users workstation.
  10296.     
  10297.     Category: Novell
  10298.     
  10299.     
  10300.      NovTotalDirSlots (Path) : Number
  10301.     
  10302.     Returns the total number of directory slots for this volume.
  10303.     
  10304.      Example:
  10305.        Writeln NovTotalDirSlots 'SYS:'
  10306.        Writeln NovTotalDirSlots 'F:'
  10307.     
  10308.     See Also: NovFreeDirSlots
  10309.     
  10310.     Category: Novell
  10311.     
  10312.     
  10313.      NovTotalVolumeSpace (Path) : Number
  10314.     
  10315.     Returns the total file space of the volume in bytes.
  10316.     
  10317.      Example:
  10318.        Writeln NovTotalVolumeSpace 'SYS:'
  10319.        Writeln NovTotalVolumeSpace 'F:'
  10320.     
  10321.     See Also: NovFreeVolumeSpace NovUsedVolumeSpace
  10322.     
  10323.     Category: Novell
  10324.     
  10325.  
  10326.     Computer Tyme * MarxMenu * Users Manual                 Page #176
  10327.     -----------------------------------------------------------------
  10328.     
  10329.      NovUsedVolumeSpace (Path) : Number
  10330.     
  10331.     Returns the used volume space of Path.
  10332.     
  10333.      Example:
  10334.        Writeln NovUsedVolumeSpace('F:')
  10335.     
  10336.     See Also: NovFreeVolumeSpace NovTotalVolumeSpace
  10337.     
  10338.     Category: Novell
  10339.     
  10340.     
  10341.      NovUserInGroup (Name,Group) : Boolean
  10342.     
  10343.     This is used to test if other users are in a group. Returns true is the
  10344.     specified user is in the specified group.
  10345.     
  10346.      Example:
  10347.        if NovUserInGroup ('KEVIN','MAILUSERS')
  10348.           <do something>
  10349.        endif
  10350.     
  10351.     See Also: NovInGroup
  10352.     
  10353.     Category: Bindery
  10354.     
  10355.     
  10356.      NovUsers (Array)
  10357.     
  10358.     Fills array with list of all users.
  10359.     
  10360.      Example:
  10361.        var Users
  10362.        NovUsers(Users)
  10363.        Loop Users
  10364.           Writeln Users[LoopIndex]
  10365.        EndLoop
  10366.     
  10367.     See Also: NovUsersLoggedIn NovGroups NovPrintQueues NovServers
  10368.     
  10369.     Category: Bindery Array
  10370.     
  10371.     
  10372.      NovUsersLoggedIn (Array)
  10373.     
  10374.     Fills array with list of all users that are currently logged in.
  10375.     
  10376.      Example:
  10377.        var Users
  10378.        NovUsersLoggedIn(Users)
  10379.        Loop Users
  10380.           Writeln Users[LoopIndex]
  10381.        EndLoop
  10382.     
  10383.  
  10384.     Computer Tyme * MarxMenu * Users Manual                 Page #177
  10385.     -----------------------------------------------------------------
  10386.     
  10387.     See Also: NovUsers NovGroups NovPrintQueues NovServers
  10388.     
  10389.     Category: Novell Array
  10390.     
  10391.     
  10392.      NovVersionNumber : Number
  10393.     
  10394.     Returns the Novell Netware version number.
  10395.     
  10396.     Category: Novell
  10397.     
  10398.     
  10399.      NovVolumeNumber (Directory) : Number
  10400.     
  10401.     Returns the Novell volume number of a directory.
  10402.     
  10403.      Example:
  10404.        Writeln NovVolumeNumber ('F:')
  10405.     
  10406.     Category: Novell
  10407.     
  10408.     
  10409.      NovVolumes (Array)
  10410.     
  10411.     Reads volumes on the default server into an array.
  10412.     
  10413.      Example:
  10414.        var X
  10415.        NovVolumes(X)
  10416.        Loop NumberOfElements(X)
  10417.           Writeln X[LoopIndex]
  10418.        EndLoop
  10419.     
  10420.     Category: Novell Array
  10421.     
  10422.     
  10423.      NovWaitOnSemaphore (Name) : Boolean
  10424.     
  10425.     This decrements the value of a semaphore and if the value is zero or
  10426.     more, returns true. If the value of the semaphore is negative, it
  10427.     returns false. This is used to indicate that you are out of whatever you
  10428.     are testing for.
  10429.     
  10430.     See Also: NovSignalSemaphore NovOpenSemaphore NovSemaphoreTimeout
  10431.     
  10432.     Category: Novell
  10433.     
  10434.  
  10435.     Computer Tyme * MarxMenu * Users Manual                 Page #178
  10436.     -----------------------------------------------------------------
  10437.     
  10438.      NovWritePropValue (Array,Obj,Prop,Type)
  10439.     
  10440.     NovWritePropValue is used to write values to Item properties only and
  10441.     not to static properties. Item properties contain data in 128 byte
  10442.     segments. These segments are passed as an array of strings. If you are
  10443.     passing binary data then build the binary data into the string array.
  10444.     Any strings that have less than 128 bytes are padded with zeros.
  10445.     
  10446.      Example:
  10447.        AppendArray(Values,'123')
  10448.        AppendArray(Values,'456')
  10449.        AppendArray(Values,'789')
  10450.        NovWritePropValue(Values,'TEST','WASTE',2)
  10451.     
  10452.     See Also: NovPropertyValues
  10453.     
  10454.     Category: Bindery
  10455.     
  10456.     
  10457.      NumberOfElements (Array) : Number
  10458.     
  10459.     This function returns the number of elements in the array. If the
  10460.     variable is not an array, 0 is returned.
  10461.     
  10462.      Example:
  10463.        var Lines
  10464.        ReadTextFile('MARXREAD.ME',Lines)
  10465.        Writeln 'The file is ' NumberofElements (Lines) ' lines long.'
  10466.     
  10467.     Category: Array
  10468.     
  10469.     
  10470.      Now : Time
  10471.     
  10472.     Returns the current moment or sets the system clock.
  10473.     
  10474.      Read the current moment:
  10475.         X = Now
  10476.      Set the system clock:
  10477.         Now = X
  10478.     
  10479.     See Also: Today Tomorrow
  10480.     
  10481.     Category: Time
  10482.     
  10483.  
  10484.     Computer Tyme * MarxMenu * Users Manual                 Page #179
  10485.     -----------------------------------------------------------------
  10486.     
  10487.      NumLock : Boolean
  10488.     
  10489.     Returns true if Num Lock is on. This command can also set the Num Lock
  10490.     on and off.
  10491.     
  10492.      Example:
  10493.        if NumLock then Write 'NumLock is On'
  10494.     
  10495.        NumLock On  ;Turns NumLock On
  10496.        NumLock Off ;Turns NumLock Off
  10497.     
  10498.        NumLock (by itself) turns NumLock On.
  10499.     
  10500.        To test for NumLock:
  10501.        if NumLock
  10502.           <do something>
  10503.        endif
  10504.     
  10505.     See Also: CapsLock ScrollLock
  10506.     
  10507.     Category: System
  10508.     
  10509.     
  10510.      Offset (String) : Number
  10511.     
  10512.     Returns the memory offset where string is located.
  10513.     
  10514.     See Also: Segment
  10515.     
  10516.     Category: Memory
  10517.     
  10518.     
  10519.      OnKey (char)
  10520.     
  10521.     When char is selected, the line(s) following are executed up to the next
  10522.     OnKey or end of file. This means that they are written to a BATCH file.
  10523.     
  10524.      Example:
  10525.        Onkey 'W'
  10526.           cd\wordstar
  10527.           ws
  10528.           cd\menu
  10529.     
  10530.     In the above example if 'W' is selected, MarxMenu will create a
  10531.     temporary batch file containing all the lines under the OnKey command.
  10532.     All the lines under an OnKey are written literally to the batch file
  10533.     with few exceptions. All leading and trailing blanks are stripped.
  10534.     String variables are evaluated and their value passed if the name of the
  10535.     string variable name starts with a '%'.
  10536.     
  10537.  
  10538.     Computer Tyme * MarxMenu * Users Manual                 Page #180
  10539.     -----------------------------------------------------------------
  10540.     
  10541.     If a line begins with a '|' (vertical bar), the line is interpreted
  10542.     rather than written to a batch file. If a '^Label' is used under an
  10543.     OnKey, a jump is made to the 'Label' and interpretation is resumed. This
  10544.     is commonly used to jump to a submenu.
  10545.     
  10546.     Another way to include MarxMenu variables and have more control inside
  10547.     the batch file is to use Bat commands. Bat commands are MarxMenu
  10548.     commands that create lines in the batch file you are creating.
  10549.     
  10550.     Any OnKey statement that causes a batch file to be written to will cause
  10551.     the menu to exit. MarxMenu normally will exit with ErrorLevel 0 unless
  10552.     an ExitCode is set.
  10553.     
  10554.     The first blank line under an OnKey ends what is written to the batch
  10555.     file. One common mistake is that when MarxMenu commands are intermixed
  10556.     with batch file statements that all the MarxMenu commands are executed
  10557.     first. This is because the batch statements are written to a batch file
  10558.     and executed when MarxMenu exist.
  10559.     
  10560.      Example:
  10561.        OnKey 'W'
  10562.          |ChDir('c:\wordstar')
  10563.          WS
  10564.          |ChDir('c:\menu')
  10565.     
  10566.     The above example won't work. Here's why. MarxMenu changes to the
  10567.     c:\wordstar directory. Then it stores WS in a batch file buffer. Then is
  10568.     changes to the c:\menu directory. Then MarxMenu writes the batch file
  10569.     and exits and you are in the wrong directory.
  10570.     
  10571.     Here is an example of using conditional statements under an OnKey
  10572.     command:
  10573.     
  10574.      Example:
  10575.        OnKey 'S'
  10576.          |if DisplayType = 'HERCMONO'
  10577.             |ChDir('C:\MONSMART')
  10578.             SMART
  10579.          |else
  10580.             |ChDir('C:\COLSMART')
  10581.             SMART
  10582.          |endif
  10583.     
  10584.     In the above example MarxMenu tests to see if a color compatible screen
  10585.     is available. If so it runs SMART out of the color directory. Otherwise
  10586.     it runs SMART out of the mono directory. Note that all commands that
  10587.     MarxMenu sees start with the vertical bar character.
  10588.     
  10589.  
  10590.     Computer Tyme * MarxMenu * Users Manual                 Page #181
  10591.     -----------------------------------------------------------------
  10592.     
  10593.     Sometimes you want to execute a command where the command is created by
  10594.     a complex set of rules. The BAT command is useful here.
  10595.     
  10596.      Example:
  10597.        OnKey 'P'
  10598.          |Bat 'CAPTURE Q=' + Queue + ' C=1 NB NFF TI=5 Local=' + PrnPort
  10599.     
  10600.     In this example the |Bat command allows to more specific control over
  10601.     what is sent to the batch file for execution.
  10602.     
  10603.     See Also: MxCmd Bat UseArrows OnScreenOnly
  10604.     
  10605.     Category: Conditional
  10606.     
  10607.     
  10608.      OnScreenOnly (On/Off)
  10609.     
  10610.     This allows you to restrict selections to only what is actually on the
  10611.     screen. Hidden OnKey commands will not execute if this is set on. This
  10612.     allows you to limit user selection to the choices on the screen.
  10613.     
  10614.      Example:
  10615.        OnScreenOnly On
  10616.     
  10617.     See Also: OnKey
  10618.     
  10619.     Category: Conditional
  10620.     
  10621.     
  10622.      OpenPrinter
  10623.     
  10624.     This command opens the printer device. It is not necessary to use this
  10625.     command in that it is done automatically whenever you print. But, if you
  10626.     are running under a multitasking shell like Windows or DesqView, it will
  10627.     reserve the printer for your task.
  10628.     
  10629.     If the printer is locked, or if you have specified a file name that
  10630.     can't be created, the variable FileResult will contain the DOS error
  10631.     code (usually 5 for access denied). A FileResult of 0 indicates success.
  10632.     
  10633.     See Also: ClosePrinter FileResult PrinterName
  10634.     
  10635.     Category: Printer
  10636.     
  10637.     
  10638.      OptionSwitch (String1,String2) : Boolean
  10639.     
  10640.     This command tests if String1 contains the option switch String2. If it
  10641.     does, it will remove the switch from String1.
  10642.     
  10643.      Example:
  10644.        String1 = 'Test /A/B/C'
  10645.        HasB = OptionSwitch(String1,'B')
  10646.     
  10647.  
  10648.     Computer Tyme * MarxMenu * Users Manual                 Page #182
  10649.     -----------------------------------------------------------------
  10650.     
  10651.      HasB will be true.
  10652.      String1 will contain 'Test /A/C'
  10653.     
  10654.     Category: String
  10655.     
  10656.     
  10657.      Or : Operator
  10658.     
  10659.     Returns logical Or if operators are boolean; or bitwise Or if operators
  10660.     are numeric.
  10661.     
  10662.      Example:
  10663.        if (B < 9) or (C > 5) then .....  ;boolean or
  10664.        X or $0F                          ;bitwise or
  10665.     
  10666.     See Also: And Xor Not
  10667.     
  10668.     Category: Math Boolean
  10669.     
  10670.     
  10671.      Ord (Char) : Number
  10672.     
  10673.     Returns the numeric value of an ascii character.
  10674.     
  10675.      Example:
  10676.        Ord('A')            ;returns 65
  10677.        Char(Ord('A') + 1)  ;returns 'B'
  10678.     
  10679.     See Also: Char
  10680.     
  10681.     Category: String
  10682.     
  10683.     
  10684.      OutFile : String
  10685.     
  10686.     When using StandardIO the input and output files by default use the
  10687.     console. The output can be overridden by setting InFile to point to a
  10688.     different file or device.
  10689.     
  10690.      Example:
  10691.        OutFile = 'OUTPUT.TXT'
  10692.        StandardIO
  10693.     
  10694.     See Also: InFile StandardIO
  10695.     
  10696.     Category: File
  10697.     
  10698.  
  10699.     Computer Tyme * MarxMenu * Users Manual                 Page #183
  10700.     -----------------------------------------------------------------
  10701.     
  10702.      OverKey : String
  10703.     
  10704.     When using UseArrows, OverKey returns the character that selects the
  10705.     item that the inverse bar is over.
  10706.     
  10707.     This can be used with IdleProgram to display context sensitive help as
  10708.     you move the inverse bar over different selections.
  10709.     
  10710.     See Also: IdleProgram
  10711.     
  10712.     Category: String
  10713.     
  10714.     
  10715.      OverLay (MenuName)
  10716.     
  10717.     Overlay loads another menu as if that menu were a procedure of the
  10718.     current menu. After the overlaid menu exits, control is returned to the
  10719.     calling menu at the next line after the overlay command.
  10720.     
  10721.     Like the Chain command, Overlay is very fast and doesn't require
  10722.     MarxMenu to be reloaded.
  10723.     
  10724.      Example:
  10725.        Overlay 'SUBMENU'
  10726.     
  10727.     When using overlays, all variables declared as shared are accessible to
  10728.     the main program and all overlays. The shared variables have to be the
  10729.     same for all overlays.
  10730.     
  10731.     See Also: Shared Chain
  10732.     
  10733.     Category: Execution
  10734.     
  10735.     
  10736.      PadLeft (String,Length) : String
  10737.     
  10738.     PadLeft will return String filled with blanks on the left side so the
  10739.     the length of the string is Length.
  10740.     
  10741.      Example:
  10742.        Writeln PadLeft('123',5)   ;returns '  123'
  10743.     
  10744.     See Also: PadRight
  10745.     
  10746.     Category: String
  10747.     
  10748.  
  10749.     Computer Tyme * MarxMenu * Users Manual                 Page #184
  10750.     -----------------------------------------------------------------
  10751.     
  10752.      PadRight (String,Length) : String
  10753.     
  10754.     PadRight will return String filled with blanks on the right side so the
  10755.     the length of the string is Length.
  10756.     
  10757.      Example:
  10758.        Writeln PadRight('123',5)   ;returns '123  '
  10759.     
  10760.     See Also: PadLeft
  10761.     
  10762.     Category: String
  10763.     
  10764.     
  10765.      ParallelPorts : Number
  10766.     
  10767.     Returns number of parallel ports.
  10768.     
  10769.     Category: System
  10770.     
  10771.     
  10772.      ParamStr (Num) : String
  10773.     
  10774.     Returns the DOS parameter string from the command line. The 0 parameter
  10775.     is MARXMENU.EXE. The 1 parameter is the name of the menu file you are
  10776.     using. This is like the %1 %2 %3 ... in batch file parameters.
  10777.     
  10778.     Category: String
  10779.     
  10780.     
  10781.      ParentEnvironment
  10782.     
  10783.     ParentEnvironment selects the parent environment for use with
  10784.     environment access commands.
  10785.     
  10786.     See Also: ReadEnv SetEnv ReadEnvironment ShellEnvironment
  10787.     See Also: CurrentEnvironment MasterEnvironment
  10788.     
  10789.     Category: Environment
  10790.     
  10791.     
  10792.      Password (Pswd,column,row)
  10793.     
  10794.     This command opens up a password box at row and column. The user must
  10795.     type the password correctly before the command will execute.
  10796.     
  10797.      Example:
  10798.        OnKey 'X'
  10799.           |PassWord('shell',4,3)
  10800.           COMMAND.COM
  10801.     
  10802.     The password is case sensitive if the password in the source code is
  10803.     lower case. But if the password in the source code is in uppercase then
  10804.     the password is not case sensitive.
  10805.     
  10806.  
  10807.     Computer Tyme * MarxMenu * Users Manual                 Page #185
  10808.     -----------------------------------------------------------------
  10809.     
  10810.      Example:
  10811.        Password 'CRITTER' 4 3    ;will accept critter or CRITTER
  10812.        Password 'CriTTeR' 4 3    ;will only accept CriTTeR
  10813.     
  10814.     Category: Conditional
  10815.     
  10816.     
  10817.      Path : String
  10818.     
  10819.     Returns the current path.
  10820.     
  10821.      Example:
  10822.        Writeln Path     ;returns 'C:\MARX'
  10823.     
  10824.     Category: String
  10825.     
  10826.     
  10827.      PathPart (String) : String
  10828.     
  10829.     Returns the path part of a file name.
  10830.     
  10831.      Example:
  10832.        PathPart ('C:\MARX\MARXMENU.EXE') ;returns C:\MARX
  10833.     
  10834.     See Also: Extension NamePart FilePart
  10835.     
  10836.     Category: String
  10837.     
  10838.     
  10839.      PauseAfterExecute (On/Off)
  10840.     
  10841.     If on, this command causes the message "Press any key to return to
  10842.     MarxMenu..." to appear after an execute command is executed.
  10843.     
  10844.     See Also: Execute
  10845.     
  10846.     Category: Execution
  10847.     
  10848.     
  10849.      Pi : Real
  10850.     
  10851.     Returns the value of Pi to 18 digits.
  10852.     
  10853.     Category: Math Float
  10854.     
  10855.     
  10856.      PickFile (FileSpec,column,row,height) : String
  10857.     
  10858.     Allows you to display a directory of files on the screen from a menu.
  10859.     Normally used to display a list of files for the user to choose from.
  10860.     Could be used in a command to load a word processor or database. Allows
  10861.     selection of the file to be loaded by the word processor or database
  10862.     program. The filename can be passed to a percent variable placed in the
  10863.     batch file executing the application. See example files on MarxMenu
  10864.     distribution disk.
  10865.     
  10866.  
  10867.     Computer Tyme * MarxMenu * Users Manual                 Page #186
  10868.     -----------------------------------------------------------------
  10869.     
  10870.      Example:
  10871.        FileName = PickFile('C:\WORDSTAR\*.DOC',3,4,17)
  10872.     
  10873.     Notice: The use of a variable with a name that starts with a '%' allows
  10874.     the choice to be passed to a batch file for execution.
  10875.     
  10876.     The three numbers represent the column and row of the upper left corner
  10877.     of the box and the height of the box. All DrawBox commands can be used
  10878.     here to control the looks of the PickFile window. This includes the
  10879.     BoxHeader command.
  10880.     
  10881.     Category: String
  10882.     
  10883.     
  10884.      PickMany(SourceArray,DestinationArray)
  10885.     
  10886.     PickMany displays a string array in the current window and allows you to
  10887.     choose as many lines as you want. The chosen lines go into
  10888.     DestinationArray.
  10889.     
  10890.     When the window appears, the space bar toggles the marked status of the
  10891.     line. The right arrow sets the marked status and the left arrow resets
  10892.     the marked status. Ctrl-Right-Arrow marks all lines, Ctrl-Left-Arrow
  10893.     unmarks all lines. The return key accepts the selection and exits. The
  10894.     ESC key aborts.
  10895.     
  10896.     If using a mouse, the left button toggles the mark on the current line.
  10897.     The right button accepts and exits.
  10898.     
  10899.     If no selections are made by marking selections then pressing Return on
  10900.     and entry selects the item the cursor bar is over. If ESC is pressed,
  10901.     the DestinationArray is left unchanged. You can test LastKey to see what
  10902.     was pressed.
  10903.     
  10904.      Example:
  10905.        ;PICK&DEL.MNU      Usage "MARXMENU PICK&DEL mask"
  10906.        ;
  10907.        var temp,work,hitlist
  10908.        boxheader "PICK&DEL: A MarxMenu Demo"
  10909.        boxfooter "Space=Mark, <Enter>=DoIt"
  10910.        drawbox 25,5,30,15
  10911.        readdirectory(cmdline,work)     ;Read Dir into Array work
  10912.        pickmany(work,hitlist)          ;Use PickMany to select files!
  10913.        boxheader "Deleting Files"
  10914.        drawbox 20,10,40,4
  10915.        loop hitlist
  10916.           writeln " Now Deleting File: " hitlist[loopindex]
  10917.           delfile hitlist[loopindex]
  10918.           wait (10)
  10919.        endloop
  10920.        erasetopwindow
  10921.        erasetopwindow
  10922.     
  10923.  
  10924.     Computer Tyme * MarxMenu * Users Manual                 Page #187
  10925.     -----------------------------------------------------------------
  10926.     
  10927.     See Also: PickManyPositions PickOne
  10928.     
  10929.     Category: String Array
  10930.     
  10931.     
  10932.      PickManyPositions (Array)
  10933.     
  10934.     After running PickMany an array PickManyPositions is created that has
  10935.     the position numbers in the original array that were chosen.
  10936.     
  10937.     See Also: PickMany
  10938.     
  10939.     Category: String Array
  10940.     
  10941.     
  10942.      PickOne (Array) : String
  10943.     
  10944.     This command displays an array in the current window and lets you pick a
  10945.     line and returns the chosen line.
  10946.     
  10947.      Example:
  10948.        var BatFiles, BatName
  10949.        ReadDirectory('*.BAT',BatFiles)
  10950.        DrawBox 35 10 20 9
  10951.        BatName = PickOne(BatFiles)
  10952.     
  10953.     See Also: PickMany PickPosition
  10954.     
  10955.     Category: String Array
  10956.     
  10957.     
  10958.      PickPosition : Number
  10959.     
  10960.     The variable PickPosition works with the PickOne command. PickPosition
  10961.     returns the number of which element in the array was picked.
  10962.     
  10963.     See Also: PickOne
  10964.     
  10965.     Category: String Array
  10966.     
  10967.     
  10968.      Port (number) : Number
  10969.     
  10970.     Returns the value at the port or writes a number to a port.
  10971.     
  10972.      Example:
  10973.        X = Port(20)   ;Reads port 20 into X
  10974.        Port(20) = X   ;Writes X to Port 20
  10975.     
  10976.     Category: Memory
  10977.     
  10978.  
  10979.     Computer Tyme * MarxMenu * Users Manual                 Page #188
  10980.     -----------------------------------------------------------------
  10981.     
  10982.      Pos (substring,string) : Number
  10983.     
  10984.     Finds position of substring in string. If substring isn't found, Pos
  10985.     returns 0.
  10986.     
  10987.      Example:
  10988.        pos('CD','ABCDE') returns 2
  10989.     
  10990.     Category: String
  10991.     
  10992.     
  10993.      PosInList (String,Array) : Number
  10994.     
  10995.     Scans a string array looking for a match on string and returns the array
  10996.     index of the first matched string if found or a zero if not found.
  10997.     
  10998.      Example:
  10999.        X[1] = 'JOE'
  11000.        X[2] = 'KEVIN'
  11001.        X[3] = 'MARC'
  11002.        Writeln PosInList('KEVIN',X)   ;returns 2
  11003.     
  11004.     See Also: PosInSortedList
  11005.     
  11006.     Category: Array
  11007.     
  11008.     
  11009.      PosInSortedList (String,Array) : Number
  11010.     
  11011.     Scans a string array looking for a match on string in a sorted array and
  11012.     returns the array index of the first matched string if found or a zero
  11013.     if not found. The array must be in sorted order. A binary search is used
  11014.     to make this command very fast.
  11015.     
  11016.      Example:
  11017.        X[1] = 'JOE'
  11018.        X[2] = 'KEVIN'
  11019.        X[3] = 'MARC'
  11020.        SortArray (X)
  11021.        Writeln PosInList('KEVIN',X)   ;returns 2
  11022.     
  11023.     See Also: PosInList
  11024.     
  11025.     Category: Array
  11026.     
  11027.  
  11028.     Computer Tyme * MarxMenu * Users Manual                 Page #189
  11029.     -----------------------------------------------------------------
  11030.     
  11031.      Power (Real,Real) : Real
  11032.     
  11033.     Raises a real to a given power.
  11034.     
  11035.      Example:
  11036.        Power(3,4)  ;returns 81.0
  11037.     
  11038.     Category: Math Float
  11039.     
  11040.     
  11041.      Pred (number) : Number
  11042.     
  11043.     Returns number minus 1.
  11044.     
  11045.      Example:
  11046.        Pred(5)  ;returns 4
  11047.     
  11048.     See Also: Succ
  11049.     
  11050.     Category: Math
  11051.     
  11052.     
  11053.      Print (string)
  11054.     
  11055.     Prints string to the printer with no CR or LF. If there is an error
  11056.     printing, the error is returned in FileResult.
  11057.     
  11058.      Example:
  11059.        Print Char(12)  ;prints a form feed
  11060.     
  11061.     Category: Printer
  11062.     
  11063.     
  11064.      PrinterName (string)
  11065.     
  11066.     Sets the file name for the printer to use. The default name is PRN.
  11067.     Other common printer names include: LPT1, LPT2, LPT3, and AUX. You can
  11068.     also use filenames to direct printer output to a file.
  11069.     
  11070.     See Also: ClosePrinter OpenPrinter
  11071.     
  11072.     Category: Printer
  11073.     
  11074.     
  11075.      Println (String)
  11076.     
  11077.     Prints string to the printer with CR and LF.
  11078.     
  11079.     See Also: Print
  11080.     
  11081.     Category: Printer
  11082.     
  11083.  
  11084.     Computer Tyme * MarxMenu * Users Manual                 Page #190
  11085.     -----------------------------------------------------------------
  11086.     
  11087.      PrintScreen (On/Off)
  11088.     
  11089.     Turns the print screen function on and off. Turning the print screen off
  11090.     disables the print screen key. This can be used to prevent a computer
  11091.     from locking up when the user hits the Print Screen key with no printer
  11092.     attached.
  11093.     
  11094.      Example:
  11095.        PrintScreen Off
  11096.     
  11097.     Category: Printer
  11098.     
  11099.     
  11100.      Procedure (name)
  11101.     
  11102.     This word begins the definition of a newly named procedure. A procedure
  11103.     is like a subroutine. Once the procedure is defined, all you have to do
  11104.     to call the procedure is use its name. The procedure definition is
  11105.     terminated by the command EndProc.
  11106.     
  11107.      Example:
  11108.        Procedure SelectFile
  11109.           BoxHeaderColor ForeColor BackColor
  11110.           BoxBorderColor Cyan Mag
  11111.           BoxInsideColor Yellow Mag
  11112.           InverseColor Yellow Red
  11113.           Return PickFile (FileType,4,5,17)
  11114.        EndProc
  11115.     
  11116.     Whenever we use the word SelectFile in the menu, all the lines of the
  11117.     procedure SelectFile will execute.
  11118.     
  11119.     Parameters can be passed to procedures. When a parameter is passed it is
  11120.     normally passed by value. This mean that a copy of the original is
  11121.     passed. Whatever you do to the copy doesn't affect the original value.
  11122.     
  11123.      Example:
  11124.        var A
  11125.        Procedure Square (X)
  11126.           X = X * X
  11127.           Writeln X
  11128.        EndProc
  11129.     
  11130.        A = 6
  11131.        Square (A)   ;prints 36
  11132.        Writeln A    ;prints 6
  11133.     
  11134.     In the above example Square (A) will write 36 but Writeln A will write
  11135.     6. The reason is that Square passes a copy of A to X but the value of X
  11136.     is not returned to A. If you want the original A to be affected you
  11137.     would use the Loc command.
  11138.     
  11139.  
  11140.     Computer Tyme * MarxMenu * Users Manual                 Page #191
  11141.     -----------------------------------------------------------------
  11142.     
  11143.      A = 6
  11144.      Square (Loc A) ;prints 36
  11145.      Writeln A      ;prints 36
  11146.     
  11147.     In this example we pass Loc A to the Square procedure. Thus, instead of X
  11148.     being set to 6, X is set to point to A. As a pointer, any operation
  11149.     performed on X is performed on A instead.
  11150.     
  11151.     You can also return parameters from procedures using the Return command.
  11152.     
  11153.      Example:
  11154.        Procedure Cube (X)
  11155.           Return X * X * X
  11156.        EndProc
  11157.     
  11158.        Writeln Cube(3)    ;returns 27
  11159.     
  11160.     In MarxMenu you can return any number of parameters as long as the
  11161.     calling procedure is expecting the same number of parameters.
  11162.     
  11163.      Example:
  11164.        Procedure CenterOfScreen
  11165.           Return (ScreenWidth / 2) (ScreenHeight / 2)
  11166.        EndProc
  11167.     
  11168.        GotoXY(CenterOfScreen)
  11169.     
  11170.     In the above example, GotoXY expects two parameters. CenterOfScreen
  11171.     returns two parameters so MarxMenu is happy with it.
  11172.     
  11173.     See Also: EndProc Return Loc
  11174.     
  11175.     Category: Misc
  11176.     
  11177.     
  11178.      PullMenu (on/off)
  11179.     
  11180.     Controls the behavior of the left and right arrow keys when using pull
  11181.     down menus. Default is Off. See PULL.MNU for example.
  11182.     
  11183.     Category: Display
  11184.     
  11185.     
  11186.      Qualifier
  11187.     
  11188.     Used to create qualifiers which are named elements of an array.
  11189.     
  11190.      Example:
  11191.        Var Presidents
  11192.        Qualifier FirstName, LastName
  11193.     
  11194.  
  11195.     Computer Tyme * MarxMenu * Users Manual                 Page #192
  11196.     -----------------------------------------------------------------
  11197.     
  11198.        Presidents[1].FirstName = 'George'
  11199.        Presidents[1].LastName = 'Washington'
  11200.     
  11201.     See Also: Var Constant Shared
  11202.     
  11203.     Category: Variable
  11204.     
  11205.     
  11206.      Random : Number
  11207.     
  11208.     The Random command returns random numbers between 0 and +2,147,483,647.
  11209.     (2^31). The algorithm has been checked for good uniformity and takes
  11210.     advantage of re-seeding itself from random events like the timer
  11211.     interrupt and keyboard input.
  11212.     
  11213.     To get a random number in a specific range, use the Mod command.
  11214.     
  11215.      Example:
  11216.        Write 'Pick a Number from 1 to 10 '
  11217.        Writeln (Random mod 10 + 1)
  11218.     
  11219.     Category: Math
  11220.     
  11221.     
  11222.      ReadAscTextFile (FileName,2D Array)
  11223.     
  11224.     ReadAscTextFile reads a standard comma delimited text file into a two
  11225.     dimensional array. The lines of the file must be limited to 1000
  11226.     characters and the number of lines must be less than 13100. It also has
  11227.     to fit in memory.
  11228.     
  11229.     All text in quotes is converted to strings. Numbers not in quotes are
  11230.     translated as numbers unless there is a '.' in which case they are
  11231.     translated as floating point numbers.
  11232.     
  11233.     See Also: ReadlnAsc
  11234.     
  11235.     Category: File Array
  11236.     
  11237.     
  11238.      ReadDirectory (Path,Array)
  11239.     
  11240.     Reads a directory into an array. This command is controlled by several
  11241.     variables that control its behavior.
  11242.     
  11243.     If WholeFileNames is set to true, the names that are returned contain
  11244.     the whole path. If HiddenAndSystem is set to True, then Hidden and
  11245.     System files are also read. If IncludeDirectories is set to true, then
  11246.     directories are also read.
  11247.     
  11248.     If DirectoriesOnly is set to true, then only directory names are read.
  11249.     
  11250.  
  11251.     Computer Tyme * MarxMenu * Users Manual                 Page #193
  11252.     -----------------------------------------------------------------
  11253.     
  11254.      Example:
  11255.        Var X
  11256.        WholeFileNames Off
  11257.        ReadDirectory('*.MNU',X)
  11258.        Loop X
  11259.           Execute ('COPY ' + X[LoopIndex] + ' A:')
  11260.        EndLoop
  11261.     
  11262.     Here's a recursive example where we use ReadDirectory to read all the
  11263.     directories on the current drive.
  11264.     
  11265.      StandardIO
  11266.      DirectoriesOnly
  11267.      WholeFileNames
  11268.     
  11269.      ReadSubdirectories(CleanFileName('\'))
  11270.     
  11271.      Procedure ReadSubdirectories (Dir)
  11272.      var Subs
  11273.         Writeln Dir
  11274.         ReadDirectory(Dir,Subs)
  11275.         Loop Subs
  11276.            ReadSubdirectories(Subs[LoopIndex])
  11277.         EndLoop
  11278.      EndProc
  11279.     
  11280.     See Also: WholeFileNames HiddenAndSystem IncludeDirectories
  11281.     See Also: DirectoriesOnly ReadSqDirectory
  11282.     
  11283.     Category: Array Directory
  11284.     
  11285.     
  11286.      ReadEnv (String) : String
  11287.     
  11288.     Returns the environment string specified.
  11289.     
  11290.      Example:
  11291.        PathString = ReadEnv('PATH')
  11292.     
  11293.     You can also read environment strings by enclosing the environment
  11294.     variable name in '%' like you do in batch files.
  11295.     
  11296.      Example:
  11297.        PathString = %PATH%
  11298.     
  11299.     See Also: SetEnv ReadEnvironment ShellEnvironment
  11300.     See Also: CurrentEnvironment ParentEnvironment MasterEnvironment
  11301.     
  11302.     Category: Environment
  11303.     
  11304.  
  11305.     Computer Tyme * MarxMenu * Users Manual                 Page #194
  11306.     -----------------------------------------------------------------
  11307.     
  11308.      ReadEnvironment (Array)
  11309.     
  11310.     Reads all environment variables into an array. The variable LongestLine
  11311.     is set to the length of the longest environment variable.
  11312.     
  11313.      Example:
  11314.        Var Env
  11315.        ReadEnvironment (Env)
  11316.        Writeln 'Your current environment variables are:'
  11317.        Loop Env
  11318.           Writeln Env[LoopIndex]
  11319.        EndLoop
  11320.        Writeln
  11321.        Writeln('Your Environment Size is ',Str(EnvSize))
  11322.        Writeln('You are using ',Str(EnvSize-EnvFree),' bytes.')
  11323.        Writeln('You have ',Str(EnvFree),' bytes free.')
  11324.     
  11325.     See Also: SetEnv ReadEnv ShellEnvironment
  11326.     See Also: CurrentEnvironment ParentEnvironment MasterEnvironment
  11327.     
  11328.     Category: Environment Array
  11329.     
  11330.     
  11331.      ReadFileBlock (Name,Offset,Size,Segment)
  11332.     
  11333.     ReadFileBlock reads disk file Name starting at byte Offset for Size
  11334.     bytes into memory buffer Segment. It is intended to read any kind of
  11335.     file.
  11336.     
  11337.     The maximum value for Size is 65504. The segment must be as large as the
  11338.     number of bytes you are reading. The following example will copy a small
  11339.     file.
  11340.     
  11341.      Example:
  11342.        Var RamBlock Size
  11343.        Size = FileSize 'MARXREAD.ME'
  11344.        RamBlock = GetMem(Size)
  11345.        ReadFileBlock('MARXREAD.ME' 0 Size RamBlock)
  11346.        WriteFileBlock('COPYREAD.ME' 0 Size RamBlock)
  11347.        FreeMem(RamBlock)
  11348.     
  11349.     See Also: WriteFileBlock GetMem FreeMem
  11350.     
  11351.     Category: File Memory
  11352.     
  11353.  
  11354.     Computer Tyme * MarxMenu * Users Manual                 Page #195
  11355.     -----------------------------------------------------------------
  11356.     
  11357.      ReadKey : String
  11358.     
  11359.     Returns the character that is input from the keyboard. If UseArrows is
  11360.     on then the inverse bar will appear in the current window for selecting
  11361.     a choice.
  11362.     
  11363.      Example:
  11364.        Var Key
  11365.     
  11366.        Repeat
  11367.          Writeln( 'Press the <ESC> key to exit this program.' )
  11368.          Key = ReadKey
  11369.        Until Key = Esc
  11370.     
  11371.     See Also: UseArrows UpperCaseOnly
  11372.     
  11373.     Category: Keyboard
  11374.     
  11375.     
  11376.      Readln : String
  11377.     
  11378.     Reads a string from the keyboard. By default the size of the string is
  11379.     from the cursor position to one space left of the right side of the
  11380.     current window. The size can be set to a smaller value using the
  11381.     InputLength command.
  11382.     
  11383.     InputString can be set to preload the string with a value for editing.
  11384.     UppercaseOnly can be set to force the string be entered in uppercase.
  11385.     
  11386.      Example:
  11387.        Name   = Readln
  11388.        Number = Value (Readln) ;Converts to an numerical value
  11389.        State  = UpperCase (ReadLn)
  11390.     
  11391.     See Also: InputString UpperCaseOnly InsertMode InputLength
  11392.     See Also: TrimInputString InputBlankChar CapsOnly
  11393.     
  11394.     Category: String
  11395.     
  11396.     
  11397.      ReadlnAsc (File,Array)
  11398.     
  11399.     ReadlnAsc reads a single line from a comma delimited Ascii file and
  11400.     breaks the fields out into an array.
  11401.     
  11402.     All fields in quotes are considered strings. If the field is just comma
  11403.     delimited and numeric then it is converted to a number. If it has a
  11404.     decimal point then it is converted to a real number.
  11405.     
  11406.      Example:
  11407.        var F Fields
  11408.        FileAssign(F,'TEST.ASC')
  11409.        FileOpen(F)
  11410.        while not EndOfFile(F)
  11411.           ReadlnAsc(F,Fields)
  11412.           loop Fields
  11413.              Write Fields[LoopIndex] ' '
  11414.           endloop
  11415.  
  11416.     Computer Tyme * MarxMenu * Users Manual                 Page #196
  11417.     -----------------------------------------------------------------
  11418.     
  11419.           Writeln
  11420.        EndWhile
  11421.     
  11422.     See Also: ReadAscTextFile
  11423.     
  11424.     Category: File
  11425.     
  11426.     
  11427.      ReadSqDirectory (Path,2DArray)
  11428.     
  11429.     ReadSqDirectory works like ReadDirectory but rather than just returning
  11430.     the file name it return all the information about the file in a 2
  11431.     dimensional array.  The fields of the array are as follows:
  11432.     
  11433.      1 - Name
  11434.      2 - Date last Updated
  11435.      3 - Size
  11436.      4 - Attributes
  11437.     
  11438.     Under Netware there are several other fields:
  11439.     
  11440.      5 - Date Created
  11441.      6 - Date last Accessed
  11442.      7 - Date last Archived
  11443.      8 - Owner
  11444.      9 - Maximum Rights Mask (Directories)
  11445.     
  11446.      Example:
  11447.        Var X Y
  11448.        ReadSqDirectory('*.EXE',X)
  11449.        Writeln 'Listing File Name, Date Last Accessed, and Size.'
  11450.        Loop X
  11451.           Y = LoopIndex
  11452.           Writeln X[Y,1] ' ' DateString(X[Y,6]) ' ' X[Y,3]
  11453.        EndLoop
  11454.     
  11455.     See Also: WholeFileNames HiddenAndSystem IncludeDirectories
  11456.     See Also: DirectoriesOnly ReadDirectory
  11457.     
  11458.     Category: Array Directory
  11459.     
  11460.     
  11461.      ReadTextFile (FileName,Array)
  11462.     
  11463.     This command reads a text file into a string array. It also sets the
  11464.     variable LongestLine to the length of the longest line in the file.
  11465.     
  11466.      Example:
  11467.        Var Docs
  11468.     
  11469.  
  11470.     Computer Tyme * MarxMenu * Users Manual                 Page #197
  11471.     -----------------------------------------------------------------
  11472.     
  11473.        ReadTextFile('MARXMENU.DOC',Docs)
  11474.          ;After the read, Docs[1] becomes the first line of the file.
  11475.          ;Docs[NumberOfElements(Docs)] becomes the last line.
  11476.        Loop NumberOfElements(Docs)
  11477.            ; Convert each line to its uppercase equivalent
  11478.          Docs[LoopIndex] = UpperCase Docs[LoopIndex]
  11479.        EndLoop
  11480.          ;Save the newly formatted array
  11481.        WriteTextFile ('NEWMM.DOC',Docs)
  11482.     
  11483.     Do not use FileOpen with ReadTextFile.
  11484.     
  11485.     The power of the ReadTextFile and WriteTextFile have expanded. You can
  11486.     now load and save arrays of any variable types, multidimensional arrays,
  11487.     and mixed array types. This includes strings, numbers, and booleans.
  11488.     File variables are also stored. When a file variable is stored and
  11489.     reloaded the FileAssign command is not necessary.
  11490.     
  11491.     See Also: LongestLine
  11492.     
  11493.     Category: File Array
  11494.     
  11495.     
  11496.      Real (Integer) : Real
  11497.     
  11498.     Returns the real equivalent of an integer.
  11499.     
  11500.      Example:
  11501.        Real(5)  ;returns 5.0
  11502.     
  11503.     See Also: Integer
  11504.     
  11505.     Category: Math Float
  11506.     
  11507.     
  11508.      Reboot
  11509.     
  11510.     Causes the computer to do a warm reboot.
  11511.     
  11512.     See Also: ColdBoot
  11513.     
  11514.     Category: Execution
  11515.     
  11516.     
  11517.      ReleaseDate : String
  11518.     
  11519.     Returns the MarxMenu Release Date.
  11520.     
  11521.     Category: String
  11522.     
  11523.  
  11524.     Computer Tyme * MarxMenu * Users Manual                 Page #198
  11525.     -----------------------------------------------------------------
  11526.     
  11527.      Repeat
  11528.     
  11529.     Used for program control. Usage:
  11530.     
  11531.      REPEAT
  11532.         (statement)
  11533.         (statement)
  11534.      UNTIL (condition)
  11535.     
  11536.      Example:
  11537.        Var Key
  11538.     
  11539.        Repeat
  11540.          Key = ReadKey
  11541.          If Key = 'A'
  11542.            Bat( 'DOLIST.EXE' )
  11543.            ExitMenu
  11544.          EndIf
  11545.          If Key = F1 Then Help
  11546.        Until Key = Esc
  11547.     
  11548.     Category: Conditional
  11549.     
  11550.     
  11551.      ResizeWindow (Horizontal Vertical)
  11552.     
  11553.     Changes the size of the top window. The horizontal and vertical numbers
  11554.     are added to the current size. Use negative numbers to shrink the
  11555.     window. The top left corner stays in the same place.
  11556.     
  11557.      Example:
  11558.        DrawBox 15 5 30 15
  11559.        ResizeWindow 15 5
  11560.     
  11561.     See Also: MoveWindow
  11562.     
  11563.     Category: Display
  11564.     
  11565.     
  11566.      Return (param,param,...)
  11567.     
  11568.     Exits a procedure and optionally returns parameters to the calling
  11569.     procedure. It can return as many parameters as you want as long as the
  11570.     calling program uses the same number of parameters. Otherwise, you will
  11571.     get an "Invalid number of parameters" error.
  11572.     
  11573.      Example:
  11574.        Procedure SmallRandomNumber
  11575.        {Returns a random number between 1 and 100}
  11576.        var SmallRand
  11577.           SmallRand = Random mod 100
  11578.           Return (SmallRand + 1)
  11579.        EndProc
  11580.     
  11581.  
  11582.     Computer Tyme * MarxMenu * Users Manual                 Page #199
  11583.     -----------------------------------------------------------------
  11584.     
  11585.     See Also: Procedure EndProc
  11586.     
  11587.     Category: Misc
  11588.     
  11589.     
  11590.      ReturnCode : Number
  11591.     
  11592.     When you use the Execute function, a ReturnCode value is fed into this
  11593.     variable when you return to the menu. The code returned is the same as
  11594.     what the DOS ErrorLevel would be. This will not work if you use the
  11595.     UseCommand On function because COMMAND.COM would have been loaded and
  11596.     the returncode would be lost.
  11597.     
  11598.     You also have to specify the COM or EXE extension or else MarxMenu will
  11599.     use COMMAND.COM and the return code will be lost.
  11600.     
  11601.      Example:
  11602.        Execute 'INMEM.EXE SK'
  11603.        if ReturnCode = 0 then Writeln 'Sidekick not Loaded!'
  11604.     
  11605.     See Also: ExitCode
  11606.     
  11607.     Category: Execution
  11608.     
  11609.     
  11610.      Right (string,count) : String
  11611.     
  11612.     Returns right characters of string for length count.
  11613.     
  11614.      Example:
  11615.        Right('ABCDEF',3) returns 'DEF'
  11616.     
  11617.     Category: String
  11618.     
  11619.     
  11620.      RmDir (String)
  11621.     
  11622.     Removes a directory. The FileResult variable returns the DOS result
  11623.     error code. A zero in FileResult indicates success. You can't remove a
  11624.     directory that contains files or other directories.
  11625.     
  11626.      Example:
  11627.        RmDir 'C:\NETUTILS'
  11628.     
  11629.     See Also: ChDir MkDir
  11630.     
  11631.     Category: Directory
  11632.     
  11633.  
  11634.     Computer Tyme * MarxMenu * Users Manual                 Page #200
  11635.     -----------------------------------------------------------------
  11636.     
  11637.      RollWindow (number)
  11638.     
  11639.     Windows can be looked at as a stack. RollWindow will roll a previous
  11640.     window to the top of the stack making the previous window the current
  11641.     window.
  11642.     
  11643.      Example:
  11644.          ;Make the Third window on the stack the active window
  11645.        RollWindow 3
  11646.          ;Write out message
  11647.        Writeln 'You have mail waiting!'
  11648.          ;Now put the windows back
  11649.        PushBackWindow (3)
  11650.     
  11651.        Procedure PushBackWindow (N)
  11652.     
  11653.        ;Will roll a window back to its original position on the stack
  11654.        ;The parameter should be the same as the parameter for the call
  11655.        ;to RollWindow. If you use RollWindow(3) then use PushBackWindow(3)
  11656.     
  11657.          Loop N
  11658.            RollWindow N
  11659.          EndLoop
  11660.        EndProc ;PushBackWindow
  11661.     
  11662.     See Also: CurrentWindow SetTopWindow
  11663.     
  11664.     Category: Display
  11665.     
  11666.     
  11667.      Run variable (parameters)
  11668.     
  11669.     This runs a procedure that was stored in a variable.
  11670.     
  11671.      var Y
  11672.     
  11673.      Procedure WriteSquared (X)
  11674.         Writeln (X * X)
  11675.      EndProc
  11676.     
  11677.      Example:
  11678.        Y = Loc(WriteSquared)
  11679.        Run Y(3)   ; This will write a 9 on the screen
  11680.     
  11681.     Warning! Don't put the variable you are running in parentheses.
  11682.     
  11683.         Run (Y,3)  ; this won't work
  11684.     
  11685.     See Also: Loc
  11686.     
  11687.  
  11688.     Computer Tyme * MarxMenu * Users Manual                 Page #201
  11689.     -----------------------------------------------------------------
  11690.     
  11691.     Category: Misc
  11692.     
  11693.     
  11694.      SavePosition (On/Off)
  11695.     
  11696.     If SavePosition is On, MarxMenu will return to the last menu selection
  11697.     you made when MarxMenu is re-entered. As you select menu layers your
  11698.     keystrokes are stored in an internal string variable called KeySave. On
  11699.     exit, MarxMenu writes KeySave to an environment variable KSV. On return
  11700.     to MarxMenu, this variable is retrieved. The return point may be altered
  11701.     by using the command KeySave = (string).
  11702.     
  11703.     Another thing this points out is that environment variables can be used
  11704.     to store information and allow MarxMenu to remember things from one
  11705.     selection to another. Since MarxMenu doesn't stay memory resident, this
  11706.     is the only way I have found to store information.
  11707.     
  11708.     Category: Keyboard Environment
  11709.     
  11710.     
  11711.      ScreenHeight : Number
  11712.     
  11713.     Returns number of rows of character on your screen. Normally this is 25.
  11714.     
  11715.     Category: Display
  11716.     
  11717.     
  11718.      ScreenWidth : Number
  11719.     
  11720.     Returns number of columns of character on your screen. Normally this is
  11721.     80.
  11722.     
  11723.     Category: Display
  11724.     
  11725.     
  11726.      ScrollLock : Boolean
  11727.     
  11728.     Returns true if Scroll Lock is on. This command can also set the Scroll
  11729.     Lock on and off.
  11730.     
  11731.      Example:
  11732.        if ScrollLock then Write 'ScrollLock is On'
  11733.     
  11734.        ScrollLock On  ;Turns ScrollLock On
  11735.        ScrollLock Off ;Turns ScrollLock Off
  11736.     
  11737.        ScrollLock (by itself) turns ScrollLock On.
  11738.     
  11739.        To test for ScrollLock:
  11740.        if ScrollLock
  11741.           <do something>
  11742.        endif
  11743.     
  11744.  
  11745.     Computer Tyme * MarxMenu * Users Manual                 Page #202
  11746.     -----------------------------------------------------------------
  11747.     
  11748.     See Also: CapsLock NumLock
  11749.     
  11750.     Category: System
  11751.     
  11752.     
  11753.      ScrollMove (On/Off)
  11754.     
  11755.     This allows you to control whether or not the ScrollLock will allow you
  11756.     to move the top window. Default is On.
  11757.     
  11758.      Example:
  11759.        ScrollMove Off
  11760.     
  11761.     Category: Display
  11762.     
  11763.     
  11764.      Second : Number
  11765.     
  11766.     Returns the current second.
  11767.     
  11768.     Category: Time
  11769.     
  11770.     
  11771.      SecondOf (Date) : Number
  11772.     
  11773.     Returns the second of a date. If Date is passed as a string it is
  11774.     converted automatically.
  11775.     
  11776.      Example:
  11777.        SecondOf '6:32:23'  ;returns 23
  11778.     
  11779.     See Also: TimeOf BadDate
  11780.     
  11781.     Category: Time
  11782.     
  11783.     
  11784.      Security (on/off)
  11785.     
  11786.     When security is on, Readln echos '*' instead of the letters that are
  11787.     being typed. This is used for such things as entering passwords other
  11788.     than using the password command.
  11789.     
  11790.      Example:
  11791.        Security On
  11792.     
  11793.     Category: String
  11794.     
  11795.  
  11796.     Computer Tyme * MarxMenu * Users Manual                 Page #203
  11797.     -----------------------------------------------------------------
  11798.     
  11799.      Segment (String) : Number
  11800.     
  11801.     Returns the memory segment where string is located.
  11802.     
  11803.     See Also: Offset
  11804.     
  11805.     Category: Memory
  11806.     
  11807.     
  11808.      SelectPath : String
  11809.     
  11810.     This command uses another program in the Computer Tyme DOS TOOLBOX
  11811.     called Pick Directory to read a text into a variable. You must have
  11812.     Computer Tyme Pick Directory for this feature to work.
  11813.     
  11814.      Example:
  11815.        OnKey 'B'
  11816.        |%BackPath = SelectPath
  11817.        cd %BackPath
  11818.        backup c: a:
  11819.     
  11820.     Category: Directory
  11821.     
  11822.     
  11823.      SerialNumber
  11824.     
  11825.     This returns your MarxMenu serial number in a numeric variable. If you
  11826.     are using an unregistered evaluation version of MarxMenu the result is
  11827.     (0)-Zero.
  11828.     
  11829.      Example:
  11830.        if SerialNumber <> 0
  11831.             writeln "My MarxMenu serial number is: " SerialNumber
  11832.        else
  11833.             writeln "This is an unregistered MarxMenu, no serial number."
  11834.        endif
  11835.     
  11836.     
  11837.      SerialPorts : Number
  11838.     
  11839.     Returns number of serial ports.
  11840.     
  11841.     Category: System
  11842.     
  11843.     
  11844.      SetArraySize (Array,Size)
  11845.     
  11846.     If the array is larger than Size the array is truncated. If it is
  11847.     smaller, memory is allocated for the array.
  11848.     
  11849.     Category: Array
  11850.     
  11851.  
  11852.     Computer Tyme * MarxMenu * Users Manual                 Page #204
  11853.     -----------------------------------------------------------------
  11854.     
  11855.      SetEnv (String)
  11856.     
  11857.     This is used to set environment strings. It can be used on the Current,
  11858.     Parent, Master or Shell environment.
  11859.     
  11860.      Example:
  11861.        SetEnv ('PATH=C:\')
  11862.        SetEnv ('COMSPEC=X:COMMAND.COM')
  11863.     
  11864.     You can also set the environment by using '%' on each side of the
  11865.     environment variable.
  11866.     
  11867.      Example:
  11868.        %PATH% = 'C:\'
  11869.        %COMSPEC% = 'O:\COMMAND.COM'
  11870.     
  11871.     MarxMenu also allows you to select which environment you are working
  11872.     with. This is done with the following commands.
  11873.     
  11874.      CurrentEnvironment
  11875.      ParentEnvironment
  11876.      MasterEnvironment
  11877.      ShellEnvironment   (default)
  11878.     
  11879.     See Also: ReadEnv ReadEnvironment ShellEnvironment
  11880.     See Also: CurrentEnvironment ParentEnvironment MasterEnvironment
  11881.     
  11882.     Category: Environment
  11883.     
  11884.     
  11885.      SetTimerTask (Loc Procedure,Ticks)
  11886.     
  11887.     SetTimerTask allows for background multitasking or real time events. The
  11888.     Ticks parameter specifies the how often the task will run in clock ticks
  11889.     (18.2 times a second). If 6 ticks are specified then the task will run
  11890.     every 4 clock ticks or about 3 times a second. This command can be used
  11891.     to run scheduled events as well as periodic events.
  11892.     
  11893.      Example:
  11894.        Within (Start,End) : Boolean
  11895.        Within returns True if a value is within the range from Start to End.
  11896.        Within works with numbers and strings.
  11897.     
  11898.      Example:
  11899.         if X within(5,7) then Write 'X is Within 5 to 7'
  11900.         if not (Ch within('A','Z')) Write 'Lower Case'
  11901.     
  11902.     Category: Event
  11903.     
  11904.  
  11905.     Computer Tyme * MarxMenu * Users Manual                 Page #205
  11906.     -----------------------------------------------------------------
  11907.     
  11908.      SetTopWindow (Number)
  11909.     
  11910.     Selects a window by number making it the current window and moves it to
  11911.     the top.
  11912.     
  11913.      Example:
  11914.        DrawBox ....
  11915.        ThisWindow = CurrentWindow
  11916.        DrawBox ....
  11917.        DrawBox ....
  11918.        SetTopWindow (ThisWindow)
  11919.     
  11920.     See Also: CurrentWindow RollWindow SetWindowUnder
  11921.     
  11922.     Category: Display
  11923.     
  11924.     
  11925.      SetWindowUnder (Window1,Window2)
  11926.     
  11927.     This command moves Window1 underneath Window2. This can be used to put a
  11928.     window back in the stack after you use SetTopWindow.
  11929.     
  11930.      Example:
  11931.        SetWindowUnder (StatusWindow,StatusWindow + 1)
  11932.     
  11933.     See Also: CurrentWindow SetTopWindow RollWindow
  11934.     
  11935.     Category: Display
  11936.     
  11937.     
  11938.      Shadow (on/off)
  11939.     
  11940.     Turn window shadows on/off.
  11941.     
  11942.      Example:
  11943.        Shadow On
  11944.     
  11945.     Category: Display
  11946.     
  11947.     
  11948.      ShadowColor (ForeColor,BackColor)
  11949.     
  11950.     Sets the color of the shadow. There are actually two shadow colors.
  11951.     MarxMenu stores different values for big shadows and small shadows.
  11952.     
  11953.     See Also: BigShadow SmallShadow ShadowPosition Shadow
  11954.     
  11955.     Category: Color
  11956.     
  11957.  
  11958.     Computer Tyme * MarxMenu * Users Manual                 Page #206
  11959.     -----------------------------------------------------------------
  11960.     
  11961.      ShadowPosition (number)
  11962.     
  11963.     Selects the shadow position around the window. A zero (default) sets the
  11964.     shadow position to the bottom right side. A one sets the shadow position
  11965.     to the bottom left. Using ShadowPosition turns shadowing on so a Shadow
  11966.     On command is not required.
  11967.     
  11968.      Example:
  11969.        ShadowPosition 1
  11970.     
  11971.     See Also: Shadow ShadowColor BigShadow SmallShadow
  11972.     
  11973.     Category: Display
  11974.     
  11975.     
  11976.      Shared
  11977.     
  11978.     The key word SHARED can be used to define variables just like VAR. Any
  11979.     variable defined with SHARED is passed globally to and from overlays.
  11980.     
  11981.     The important thing is that the Shared variables must be defined exactly
  11982.     the same way between the overlays. There is also a pre-defined variable
  11983.     called COMMON. Technically, Shared variables are qualifiers off of
  11984.     COMMON.
  11985.     
  11986.      Example:
  11987.        Shared Var1 Var2 Var3
  11988.     
  11989.     See Also: Var Constant Qualifier
  11990.     
  11991.     Category: Variable
  11992.     
  11993.     
  11994.      ShellEnvironment
  11995.     
  11996.     ShellEnvironment selects the environment of the last COMMAND.COM in
  11997.     memory for use with environment access commands. This is usually the
  11998.     same as the Master Environment.
  11999.     
  12000.     More than one COMMAND.COM is loaded when you are running a shell under
  12001.     WINDOWS or DESQVIEW. When using these programs, you will want to access
  12002.     the Shell Environment instead of the Master Environment. The Shell
  12003.     Environment is the one that will run batch files.
  12004.     
  12005.     See Also: ReadEnv SetEnv ReadEnvironment MasterEnvironment
  12006.     See Also: CurrentEnvironment ParentEnvironment
  12007.     
  12008.     Category: Environment
  12009.     
  12010.  
  12011.     Computer Tyme * MarxMenu * Users Manual                 Page #207
  12012.     -----------------------------------------------------------------
  12013.     
  12014.      Shl : Operator
  12015.     
  12016.     Shift left, does a binary 32 bit shift left.
  12017.     
  12018.      Example:
  12019.        Writeln 5 Shl 2  ;returns 20
  12020.     
  12021.     See Also: Shr
  12022.     
  12023.     Category: Math
  12024.     
  12025.     
  12026.      Shr : Operator
  12027.     
  12028.     Shift right, does a binary 32 bit shift right.
  12029.     
  12030.      Example:
  12031.        Writeln 20 Shr 2  ;returns 5
  12032.     
  12033.     See Also: Shl
  12034.     
  12035.     Category: Math
  12036.     
  12037.     
  12038.      Sin (Radians) : Real
  12039.     
  12040.     Returns the Sine of a real.
  12041.     
  12042.     Category: Math Float
  12043.     
  12044.     
  12045.      SingleLineBox
  12046.     
  12047.     Selects single line box for menu borders.
  12048.     
  12049.     See Also: DoubleLineBox BlockBox CustomBox NoBoxBorder
  12050.     
  12051.     Category: Display
  12052.     
  12053.     
  12054.      SmallShadow
  12055.     
  12056.     Selects small shadow type.
  12057.     
  12058.     See Also: BigShadow ShadowPosition ShadowColor
  12059.     
  12060.     Category: Display
  12061.     
  12062.  
  12063.     Computer Tyme * MarxMenu * Users Manual                 Page #208
  12064.     -----------------------------------------------------------------
  12065.     
  12066.      SortArray (Array)
  12067.     
  12068.     SortArray will do an alphabetical sort on an array of strings.
  12069.     
  12070.      Example:
  12071.        Sort a Text File:
  12072.     
  12073.        Usage: DIR|MARXMENU SORT|MORE
  12074.               MARXMENU SORT INFILE OUTFILE
  12075.     
  12076.        SORT.MNU
  12077.          var SortBuf
  12078.          StandardIO
  12079.          ReadTextFile  (ParamStr(2),SortBuf)
  12080.          SortArray(SortBuf)
  12081.          WriteTextFile (ParamStr(3),SortBuf)
  12082.     
  12083.     Category: Array
  12084.     
  12085.     
  12086.      SortArrayLinked Array,KeyArray
  12087.     
  12088.     SortArrayLinked will sort an array based upon the contents of a key
  12089.     array.
  12090.     
  12091.      Example:
  12092.        var NumberArray,key
  12093.     
  12094.        writeln "Array sequential on element 1"
  12095.     
  12096.        loop 10
  12097.             NumberArray[loopindex,1]=loopindex
  12098.             NumberArray[loopindex,2]=(random mod 50 + 1)
  12099.             writeln NumberArray[loopindex,1] "   " NumberArray[loopindex,2]
  12100.        endloop
  12101.     
  12102.        MatrixInvert NumberArray
  12103.        key = NumberArray[2]
  12104.        matrixinvert NumberArray
  12105.        sortarraylinked NumberArray,key
  12106.     
  12107.        writeln "Array now sorted based on element 2"
  12108.     
  12109.        loop 10
  12110.             writeln NumberArray[loopindex,1] "   " NumberArray[loopindex,2]
  12111.        endloop
  12112.     
  12113.     See Also: MatrixInvert
  12114.     
  12115.  
  12116.     Computer Tyme * MarxMenu * Users Manual                 Page #209
  12117.     -----------------------------------------------------------------
  12118.     
  12119.     Category: Array
  12120.     
  12121.     
  12122.      Sound (on/off)
  12123.     
  12124.     Turn sound effects on/off.
  12125.     
  12126.     Category: Display
  12127.     
  12128.     
  12129.      SplitPath (Array)
  12130.     
  12131.     SplitPath reads the PATH environment variable and splits it up into and
  12132.     array of strings that are directories the path is made up of. All
  12133.     directory names are capitalized.
  12134.     
  12135.      Example:
  12136.        var P
  12137.        SplitPath P
  12138.        Loop P
  12139.           Writeln P[LoopIndex]   ;writes the directories in PATH
  12140.        EndLoop
  12141.     
  12142.     See Also: BuildPath FixPath
  12143.     
  12144.     Category: String Array Environment
  12145.     
  12146.     
  12147.      Sqr (Real) : Real
  12148.     
  12149.     Returns the Square Root of a real.
  12150.     
  12151.     Category: Math Float
  12152.     
  12153.     
  12154.      StandardIO (on/off)
  12155.     
  12156.     This tells MarxMenu to use standard Input and Output file handles for
  12157.     reading the keyboard and writing to the screen when turned on. When
  12158.     turned off, MarxMenu does direct screen writes. When StandardIO is on,
  12159.     several MarxMenu commands will send ANSI escape sequences. The commands
  12160.     that send ANSI sequences are as follows:
  12161.     
  12162.      TextColor
  12163.      TextBackground
  12164.      ClearScreen
  12165.      ClearLine
  12166.      GotoXY
  12167.     
  12168.     The input and output can be redirected by using the InFile and OutFile
  12169.     variables.
  12170.     
  12171.  
  12172.     Computer Tyme * MarxMenu * Users Manual                 Page #210
  12173.     -----------------------------------------------------------------
  12174.     
  12175.     See Also: InFile OutFile
  12176.     
  12177.     Category: Display Ansi
  12178.     
  12179.     
  12180.      Str (number) : String
  12181.     
  12182.     Returns a string value from a numeric variable.
  12183.     
  12184.      Example:
  12185.        writeln "*"+Str(6 * 5)+"*"  ;returns the string '*30*'
  12186.     
  12187.     See Also: Value
  12188.     
  12189.     Category: String
  12190.     
  12191.     
  12192.      StuffAKey (String or Number)
  12193.     
  12194.     Stuffs a single key into the DOS keyboard buffer when MarxMenu exits.
  12195.     The limit is 16 characters.
  12196.     
  12197.      Example:
  12198.        StuffAKey($3F00) ;stuff the F5 key
  12199.        StuffAKey F5     ;same thing
  12200.     
  12201.     Do not mix StuffAKey with StuffKBD. Use one or the other.
  12202.     
  12203.     Category: Execution Keyboard String
  12204.     
  12205.     
  12206.      StuffKBD (String)
  12207.     
  12208.     Stuffs the string into the DOS keyboard buffer when MarxMenu exits. The
  12209.     limit is 16 characters.
  12210.     
  12211.      Example:
  12212.        StuffKBD 'LOGOUT' + CR
  12213.     
  12214.     Category: Execution Keyboard String
  12215.     
  12216.     
  12217.      StuffKeyboardNow
  12218.     
  12219.     Normally the keyboard stuffing is done as MarxMenu quits. This forces
  12220.     the keyboard to be stuffed immediately.
  12221.     
  12222.     Category: Keyboard
  12223.     
  12224.  
  12225.     Computer Tyme * MarxMenu * Users Manual                 Page #211
  12226.     -----------------------------------------------------------------
  12227.     
  12228.      Succ (number) : Number
  12229.     
  12230.     Returns number plus 1.
  12231.     
  12232.      Example:
  12233.        Succ(4)  ;returns 5
  12234.     
  12235.     See Also: Pred
  12236.     
  12237.     Category: Math
  12238.     
  12239.     
  12240.      Suggest (Char)
  12241.     
  12242.     Normally the UseArrows command will start in the upper left hand corner.
  12243.     By using the Suggest command, you can set it to start on any menu
  12244.     selection.
  12245.     
  12246.      Example:
  12247.        Suggest 'E'
  12248.     
  12249.     Category: Display
  12250.     
  12251.     
  12252.      TaskNumber : Number
  12253.     
  12254.     Reads the current task number. If running DesqView or Software Carousel,
  12255.     this is set to the window number. If running TaskMax this is set to the
  12256.     TaskID. It can also be set by setting the TASK= environment variable.
  12257.     
  12258.     The TaskNumber is used to create unique batch files in an operating
  12259.     environment that supports multiple tasks so that temporary files from
  12260.     one task don't trash temporary files from another task when running
  12261.     MarxMenu more than once.
  12262.     
  12263.     Category: System
  12264.     
  12265.     
  12266.      TextBackground (color)
  12267.     
  12268.     Sets text background color.
  12269.     
  12270.      Example:
  12271.        TextBackground Blue
  12272.     
  12273.     Category: Color Ansi
  12274.     
  12275.  
  12276.     Computer Tyme * MarxMenu * Users Manual                 Page #212
  12277.     -----------------------------------------------------------------
  12278.     
  12279.      TextColor (forecolor,backcolor)
  12280.     
  12281.     Sets the color of text to be displayed on the screen. TextColor resets
  12282.     the value of CapsColor.
  12283.     
  12284.      Example:
  12285.        loop 16
  12286.             TextColor loopindex,Brown
  12287.             Writeln "This is a test"
  12288.        endloop
  12289.     
  12290.     Category: Color Ansi
  12291.     
  12292.     
  12293.      TextMode (num)
  12294.     
  12295.     Sets the video text mode.
  12296.     
  12297.      0 = 40 column BW
  12298.      1 = 40 column COLOR
  12299.      2 = 80 column BW
  12300.      3 = 80 column COLOR
  12301.      7 = Mono
  12302.      258 = 43/50 line EGA BW
  12303.      259 = 43/50 line EGA COLOR
  12304.     
  12305.      Example:
  12306.        TextMode BW80
  12307.     
  12308.     Category: Display
  12309.     
  12310.     
  12311.      TextPos : Number
  12312.     
  12313.     TextPos returns the current position in a text file. This can be saved
  12314.     so that you can go to the same place using TextSeek.
  12315.     
  12316.     See Also: TextSeek
  12317.     
  12318.     Category: File
  12319.     
  12320.     
  12321.      TextSeek (Number)
  12322.     
  12323.     TextSeek moves to a specific byte in a text file.
  12324.     
  12325.     See Also: TextPos
  12326.     
  12327.     Category: File
  12328.     
  12329.  
  12330.     Computer Tyme * MarxMenu * Users Manual                 Page #213
  12331.     -----------------------------------------------------------------
  12332.     
  12333.      Then
  12334.     
  12335.     Conditional control.
  12336.     
  12337.      Example:
  12338.        if <condition> then <do something>
  12339.     
  12340.     See Also: If Else Endif ElseIf
  12341.     
  12342.     Category: Conditional
  12343.     
  12344.     
  12345.      TimeOf (String) : Number
  12346.     
  12347.     Converts a string representing a date to a time number. The number is
  12348.     the number of seconds since 01-01-80. Conversion follows international
  12349.     rules based on the country code.
  12350.     
  12351.      Examples:
  12352.        '4-7-91'                 ;04-07-1991 00:00:00
  12353.        'April 7th, 1991 4:35pm' ;04-07-1991 16:35:00
  12354.        '12:35:23a'              ;04-07-1991 00:35:23
  12355.        '3:15'                   ;04-07-1991 03:15:00
  12356.     
  12357.     If the string can't be converted, then BadDate is set to true.
  12358.     
  12359.     See Also: BadDate
  12360.     
  12361.     Category: International Time
  12362.     
  12363.     
  12364.      Timer : Number
  12365.     
  12366.     Returns the system timer 32 bit value that is set to 0 at midnight and
  12367.     is incremented 18.2 times a second.
  12368.     
  12369.     Category: Time
  12370.     
  12371.     
  12372.      TimeSeparator : String
  12373.     
  12374.     Returns the time separator character from the country information.
  12375.     
  12376.     See Also: DecimalSeparator DateSeparator CountryCode
  12377.     
  12378.     Category: International Time
  12379.     
  12380.  
  12381.     Computer Tyme * MarxMenu * Users Manual                 Page #214
  12382.     -----------------------------------------------------------------
  12383.     
  12384.      TimeString (Time) : String
  12385.     
  12386.     Returns the time as a string in HH:MM:SS format. 24 hour. If no
  12387.     parameter is passed, Now is assumed.
  12388.     
  12389.      Example:
  12390.        Writeln TimeString
  12391.           ;returns the time of Now as text
  12392.        Writeln TimeString (Now + (5 * SecondsInHour))
  12393.           ;returns the time of 5 hours from now as text
  12394.     
  12395.     Category: String Time
  12396.     
  12397.     
  12398.      TMaxActiveTasks : Number
  12399.     
  12400.     Returns the number of active tasks started under TaskMax.
  12401.     
  12402.     Category: TaskMax
  12403.     
  12404.     
  12405.      TMaxCreateTask (command string)
  12406.     
  12407.     TMaxCreateTask creates a new task and executes it. You pass it a command
  12408.     line just like you would use the Execute program. Like the execute
  12409.     program, if you use the COM or EXE extension then you won't load a
  12410.     secondary command.com and save yourself 5k of memory and gain some
  12411.     speed. When the program exits that task is cleared.
  12412.     
  12413.     The TaskID of the created task is returned in TMaxResult.
  12414.     
  12415.      Example:
  12416.        TMaxCreateTask 'DIR *.*'
  12417.     
  12418.     See Also: TMaxReturnCount TMaxResult
  12419.     
  12420.     Category: TaskMax
  12421.     
  12422.     
  12423.      TMaxCut (TaskID)
  12424.     
  12425.     Activates TaskMax data cutting function.
  12426.     
  12427.     See Also: TMaxPaste TMaxGetPasteBuffer TMaxSetPasteBuffer
  12428.     
  12429.     Category: TaskMax
  12430.     
  12431.  
  12432.     Computer Tyme * MarxMenu * Users Manual                 Page #215
  12433.     -----------------------------------------------------------------
  12434.     
  12435.      TMaxDeleteTask (TaskID)
  12436.     
  12437.     Kills the task identified by TaskID.
  12438.     
  12439.     See Also: TMaxTaskOpenFiles
  12440.     
  12441.     Category: TaskMax
  12442.     
  12443.     
  12444.      TMaxDirectSwitching (On/Off)
  12445.     
  12446.     Turns on or off the ability to use the direct switch keys without going
  12447.     through the task manager menu. Default is On. By setting it to off the
  12448.     direct switch keys work normally. TaskMax sometimes conflicts with
  12449.     applications when direct switching is on.
  12450.     
  12451.      Example:
  12452.        TMaxdirectSwitching Off
  12453.     
  12454.     Category: TaskMax
  12455.     
  12456.     
  12457.      TMaxEMSMemLim (Number)
  12458.     
  12459.     This is a variable that can be either read or set to the maximum number
  12460.     of bytes of EMS memory that each task can have. This prevents one task
  12461.     from hogging up all the EMS. Setting this to 0 disables limiting.
  12462.     
  12463.      Example:
  12464.        TMaxEMSMemLim = 2000000   ;2 megs per task
  12465.        Writeln TMaxEMSLim
  12466.     
  12467.     Category: TaskMax
  12468.     
  12469.     
  12470.      TMaxGetPasteBuffer (Array)
  12471.     
  12472.     Reads the TaskMax paste buffer into an array of strings.
  12473.     
  12474.     See Also: TMaxCut TMaxPaste TMaxSetPasteBuffer
  12475.     
  12476.     Category: TaskMax
  12477.     
  12478.     
  12479.      TMaxInstalled : Boolean
  12480.     
  12481.     This function returns true if TaskMax is installed. Any other TaskMax
  12482.     command produces a run-time error if used when TaskMax is not installed.
  12483.     
  12484.      Example:
  12485.        if not TMaxInstalled
  12486.           Writeln 'This menu requires TaskMax to run!'
  12487.        endif
  12488.     
  12489.  
  12490.     Computer Tyme * MarxMenu * Users Manual                 Page #216
  12491.     -----------------------------------------------------------------
  12492.     
  12493.     Category: TaskMax
  12494.     
  12495.     
  12496.      TMaxMaxTasks : Number
  12497.     
  12498.     Returns the total number of tasks allowed by TaskMax. Default is 20.
  12499.     
  12500.     Category: TaskMax
  12501.     
  12502.     
  12503.      TMaxNameTask (Task,Name)
  12504.     
  12505.     Normally TaskMax automatically names tasks according to what program is
  12506.     running. TMaxNameTask allows you to override the default task name with
  12507.     a task name of your choosing. The name is limited to 8 characters,
  12508.     
  12509.      Example:
  12510.        TMaxNameTask (2,'MYNAME')   ;renames task 2
  12511.     
  12512.     Category: TaskMax
  12513.     
  12514.     
  12515.      TMaxPaste (TaskID)
  12516.     
  12517.     Activates TaskMax data pasting function.
  12518.     
  12519.     See Also: TMaxCut TMaxGetPasteBuffer TMaxSetPasteBuffer
  12520.     
  12521.     Category: TaskMax
  12522.     
  12523.     
  12524.      TMaxReadTaskInfo (2D Array)
  12525.     
  12526.     Reads the task information table into a 2 dimensional array where the
  12527.     first field is the task name and the second field is the TaskId number.
  12528.     The TaskID number is used by all TMax commands that act on a single task
  12529.     (TMaxDelete, TMaxSwitchTasks ... ).
  12530.     
  12531.      Example:
  12532.        var Tasks
  12533.        TMaxReadTaskInfo(Tasks)
  12534.        Loop Tasks
  12535.           Writeln Tasks[LoopIndex,1] ' ' Tasks[LoopIndex,2]
  12536.        EndLoop
  12537.     
  12538.     Category: TaskMax
  12539.     
  12540.  
  12541.     Computer Tyme * MarxMenu * Users Manual                 Page #217
  12542.     -----------------------------------------------------------------
  12543.     
  12544.      TMaxResult : Number
  12545.     
  12546.     TMaxResult is a variable containing return information that other TMax
  12547.     command return or the result status of a TMax command.
  12548.     
  12549.     Category: TaskMax
  12550.     
  12551.     
  12552.      TMaxReturnCount
  12553.     
  12554.     This variable sets the number of timer ticks (18.2 ticks per second)
  12555.     that TMaxCreateTask will execute a program before returning to the
  12556.     original program. If it is set to 0 it will stay in the original
  12557.     program. By setting TMaxReturnCount to a number other than 0 you can run
  12558.     a program for a few seconds and come back. This is used to preload tasks
  12559.     that you might later want to switch to.
  12560.     
  12561.       Example:
  12562.         TMaxReturnCount = 27      ;1.5 Seconds
  12563.         TMaxCreateTask 'DM3.EXE'  ;load a file manager
  12564.         TMaxReturnCount = 0       ;set back to 0 for normal usage
  12565.     
  12566.     See Also: TMaxCreateTask
  12567.     
  12568.     Category: TaskMax
  12569.     
  12570.     
  12571.      TMaxSetPasteBuffer (Array)
  12572.     
  12573.     Sets the TaskMax paste buffer to the strings in array.
  12574.     
  12575.     See Also: TMaxCut TMaxPaste TMaxGetPasteBuffer
  12576.     
  12577.     Category: TaskMax
  12578.     
  12579.     
  12580.      TMaxSwitchTasks (TaskID)
  12581.     
  12582.     Switches the current task out and selects the task identified be TaskID.
  12583.     
  12584.     Category: TaskMax
  12585.     
  12586.     
  12587.      TMaxSwitchToManager
  12588.     
  12589.     This command brings up the task manager the same way as if you had
  12590.     pressed the hot key.
  12591.     
  12592.     Category: TaskMax
  12593.     
  12594.  
  12595.     Computer Tyme * MarxMenu * Users Manual                 Page #218
  12596.     -----------------------------------------------------------------
  12597.     
  12598.      TMaxTakeOver (On/Off)
  12599.     
  12600.     This allows you MarxMenu program to become the task manager menu. When
  12601.     the user presses the hot key to pop up the task switching menu it will
  12602.     pop up your MarxMenu program instead. You can disable this by setting it
  12603.     to off.
  12604.     
  12605.     Category: TaskMax
  12606.     
  12607.     
  12608.      TMaxTaskOpenFiles (TaskID) : Number
  12609.     
  12610.     Returns the number of open files a task has. You may want to test to see
  12611.     if a task that open files before deleting the task.
  12612.     
  12613.      Example:
  12614.        if TMaxTaskOpenFiles (3) > 0
  12615.           Writeln 'Task 3 has open files.'
  12616.        endif
  12617.     
  12618.     See Also: TMaxDeleteTask
  12619.     
  12620.     Category: TaskMax
  12621.     
  12622.     
  12623.      TMaxThisTask : Number
  12624.     
  12625.     Returns the TaskID of the current task.
  12626.     
  12627.     Category: TaskMax
  12628.     
  12629.     
  12630.      TMaxVersion : Number
  12631.     
  12632.     Returns the version number of TaskMax.
  12633.     
  12634.     Category: TaskMax
  12635.     
  12636.     
  12637.      Today : Date
  12638.     
  12639.     Returns the current day as a date. The date returned has the time set to
  12640.     midnight or 00:00:00. It can also be used to set the system date.
  12641.     
  12642.      Read the current day;
  12643.         X = Today
  12644.      Set the system clock:
  12645.         Today = TimeOf '08-19-91'
  12646.     
  12647.     See Also: Tomorrow Now
  12648.     
  12649.     Category: Time
  12650.     
  12651.  
  12652.     Computer Tyme * MarxMenu * Users Manual                 Page #219
  12653.     -----------------------------------------------------------------
  12654.     
  12655.      Tomorrow : Time
  12656.     
  12657.     Returns the time of the day after today at midnight.
  12658.     
  12659.     See Also: Today Now
  12660.     
  12661.     Category: Time
  12662.     
  12663.     
  12664.      Tone (Frequency,Duration)
  12665.     
  12666.     This command plays a note at Frequency cycles per second for a period of
  12667.     Duration 1/18 of a second. The reason it is in 1/18 seconds is because
  12668.     there is a standard interrupt that gives me that time period. The IBM
  12669.     series computers are not music oriented machines so don't throw away
  12670.     your Compact Disk player.
  12671.     
  12672.     The maximum duration is 255 1/18 of a second. Normally, MarxMenu will
  12673.     create a break in between notes equal to 1/8 of the duration of the
  12674.     note. If you want to eliminate the break and create a 'slur' (music
  12675.     term), add 256 to the duration. This tells MarxMenu to connect the notes
  12676.     without a break.
  12677.     
  12678.     Category: Music
  12679.     
  12680.     
  12681.      TotalDiskSpace <drive> : Number
  12682.     
  12683.     Returns total disk space in bytes.
  12684.     
  12685.      Example:
  12686.        Writeln (TotalDiskSpace 'C')
  12687.     
  12688.     TotalDiskSpace only looks at the first character of the string for
  12689.     the drive letter.
  12690.     
  12691.     Category: System
  12692.     
  12693.     
  12694.      TotalEMS : Number
  12695.     
  12696.     Returns total EMS memory in bytes.
  12697.     
  12698.      Example:
  12699.        Writeln TotalEMS
  12700.     
  12701.     Category: Memory
  12702.     
  12703.  
  12704.     Computer Tyme * MarxMenu * Users Manual                 Page #220
  12705.     -----------------------------------------------------------------
  12706.     
  12707.      Trim (string)
  12708.     
  12709.     Trims white space from both ends of a string. White space is
  12710.     blank characters and lower.
  12711.     
  12712.      Example:
  12713.        St = ' ABC '
  12714.        Trim St        ;St now is 'ABC'
  12715.     
  12716.     Category: String
  12717.     
  12718.     
  12719.      TrimInputString (On/Off)
  12720.     
  12721.     TrimInputString if set to on will cause blank characters to be trimmed
  12722.     from the front and tail of a string read from the keyboard with Readln.
  12723.     By default, TrimInputString is set to True.
  12724.     
  12725.     See Also: Readln
  12726.     
  12727.     Category: String
  12728.     
  12729.     
  12730.      TrueName (String) : String
  12731.     
  12732.     There is an undocumented feature of DOS called TRUENAME. It returns the
  12733.     real name of a file or directory looking past such things as drive
  12734.     mappings and Assigned or Substituted drives. On local drives you get the
  12735.     drive and path where the file really is. On networks you get server and
  12736.     volume information where the server name starts with a '\\'.
  12737.     
  12738.      Example:
  12739.        TrueName ('H:')  ;returns \\TYME\SYS\HOME\MARC
  12740.     
  12741.     See Also: CleanFileName
  12742.     
  12743.     Category: String File
  12744.     
  12745.     
  12746.      UnBlank : Boolean
  12747.     
  12748.     Unblank returns true if MarxMenu has determined that the screen blanker
  12749.     should finish. Your screen blanker needs to call UnBlank to determine
  12750.     when to unblank the screen.
  12751.     
  12752.      Example:
  12753.        while not UnBlank
  12754.           <your screen blanker>
  12755.        endwhile
  12756.     
  12757.     You can also set UnBlank to true when you want to UnBlank the screen.
  12758.     This can be used if you write your own screen blanker that is an
  12759.     external program.
  12760.     
  12761.  
  12762.     Computer Tyme * MarxMenu * Users Manual                 Page #221
  12763.     -----------------------------------------------------------------
  12764.     
  12765.     An example of writing your own screen blanker is included in the file
  12766.     WORM.INC.
  12767.     
  12768.      Example:
  12769.        Procedure MyBlanker
  12770.           Execute 'MYBLANK.EXE'
  12771.           UnBlank = True
  12772.        EndProc
  12773.     
  12774.     See Also: BlankScreenProgram
  12775.     
  12776.     Category: Display
  12777.     
  12778.     
  12779.      UniqueFileName : String
  12780.     
  12781.     Uses the create new file call to get a filename that is different than
  12782.     any other file name. It is tied to the DOS call that is used to create a
  12783.     unique file name according to the rules of your operating system.
  12784.     
  12785.     Category: File String
  12786.     
  12787.     
  12788.      Until
  12789.     
  12790.     Conditional control.
  12791.     
  12792.      Example:
  12793.        Repeat
  12794.           <statement>
  12795.           <statement>
  12796.        Until <condition>
  12797.     
  12798.     See Also: Repeat.
  12799.     
  12800.     Category: Conditional
  12801.     
  12802.     
  12803.      UpperCase (String) : String
  12804.     
  12805.     Return UpperCase of String including support for international
  12806.     characters.
  12807.     
  12808.      Example:
  12809.        Name = UpperCase(Name)
  12810.     
  12811.     See Also: LowerCase
  12812.     
  12813.     Category: String International
  12814.     
  12815.  
  12816.     Computer Tyme * MarxMenu * Users Manual                 Page #222
  12817.     -----------------------------------------------------------------
  12818.     
  12819.      UpperCaseOnly : Boolean
  12820.     
  12821.     Setting UpperCaseOnly to on forces text entered with Readln or ReadKey
  12822.     to upper case.
  12823.     
  12824.      Example:
  12825.        UpperCaseOnly On
  12826.     
  12827.     See Also: Readln
  12828.     
  12829.     Category: String
  12830.     
  12831.     
  12832.      UseArrows
  12833.     
  12834.     UseArrows tells MarxMenu that the selection will be made by moving an
  12835.     inverse video bar over the selections. No parameters are required for
  12836.     this command to work. It will pick the first line with a capital letter
  12837.     as the first menu selection. All text in the window must be indented at
  12838.     least one space and there must be one space between the end of the line
  12839.     and the right wall of the window. Multiple items on the same line must
  12840.     be separated by two or more spaces.
  12841.     
  12842.     The OnKey selection is triggered by either the first capital letter in
  12843.     the selection or by a number from 0 - 9 or some punctuation characters.
  12844.     This number or letter will be a different color if you use the CapsColor
  12845.     command. (See Also: PULL.MNU for an example).
  12846.     
  12847.     UseArrows Off will disable this feature.
  12848.     
  12849.     See Also: ReadKey
  12850.     
  12851.     Category: Display
  12852.     
  12853.     
  12854.      UseCommand (on/off)
  12855.     
  12856.     Used with Execute. UseCommand will load COMMAND.COM before running the
  12857.     specified program. Its not as fast, because the system has to find and
  12858.     load COMMAND.COM, then the specified program. The advantage is if
  12859.     COMMAND.COM is loaded, it will allow you to run batch files and internal
  12860.     DOS commands. It also doesn't require you to specify the COM or EXE
  12861.     extension.
  12862.     
  12863.      Example:
  12864.        OnKey 'D'
  12865.        |UseCommand On
  12866.        |Execute 'DM'
  12867.     
  12868.     The default is OFF.
  12869.     
  12870.  
  12871.     Computer Tyme * MarxMenu * Users Manual                 Page #223
  12872.     -----------------------------------------------------------------
  12873.     
  12874.     See Also: Execute
  12875.     
  12876.     Category: Execution
  12877.     
  12878.     
  12879.      UsedDiskSpace <drive> : Number
  12880.     
  12881.     Returns used disk space in bytes.
  12882.     
  12883.      Example:
  12884.        Writeln (UsedDiskSpace 'C')
  12885.     
  12886.     UsedDiskSpace only looks at the first character of the string for the
  12887.     drive letter.
  12888.     
  12889.     Category: System
  12890.     
  12891.     
  12892.      UseNovPassword : Boolean
  12893.     
  12894.     If UseNovPassword is set to true then the screen blanker will require
  12895.     that the user type his Novell password to unblank the screen. Full
  12896.     Novell security and intruder detection is active here. If Novell's
  12897.     intruder detection is active, then if an intruder fails to type in the
  12898.     password after a number of attempts, then Netware will not accept the
  12899.     correct password until intruder detection allows it.
  12900.     
  12901.     If you don't know what intruder detection is, read the Netware manuals
  12902.     on the subject. It is something you should use.
  12903.     
  12904.     Category: Novell
  12905.     
  12906.     
  12907.      Value (string) : Number
  12908.     
  12909.     Converts String to Number. Leading $ indicates Hex.
  12910.     
  12911.      Example:
  12912.        Value '5'   ;returns 5
  12913.     
  12914.     See Also: Str
  12915.     
  12916.     Category: String Math Real
  12917.     
  12918.     
  12919.      Var
  12920.     
  12921.     In MarxMenu all variables must be declared before they can be
  12922.     referenced.  The VAR command is used to declare variables.
  12923.     
  12924.      Example:
  12925.        var X,Y,Z
  12926.        var
  12927.          X = 5
  12928.          Y = 6
  12929.     
  12930.  
  12931.     Computer Tyme * MarxMenu * Users Manual                 Page #224
  12932.     -----------------------------------------------------------------
  12933.     
  12934.     See Also: Constant Shared Qualifier
  12935.     
  12936.     Category: Variable
  12937.     
  12938.     
  12939.      VarType (Variable) : String
  12940.     
  12941.     VarType returns the type of data contained in a variable. Types returned
  12942.     include the following:
  12943.     
  12944.       NUL
  12945.       NUMBER
  12946.       REAL
  12947.       STRING
  12948.       ARRAY
  12949.       FILE
  12950.       POINTER
  12951.       PROCEDURE
  12952.       UNKNOWN
  12953.     
  12954.     Category: Variable
  12955.     
  12956.     
  12957.      VideoMode : Number
  12958.     
  12959.     Returns Current Video Mode.
  12960.     
  12961.      Example:
  12962.        Writeln VideoMode
  12963.     
  12964.     Category: Display
  12965.     
  12966.     
  12967.      VideoPage : Number
  12968.     
  12969.     Returns Current Video Page.
  12970.     
  12971.     Category: Display
  12972.     
  12973.     
  12974.      ViewArray (Array)
  12975.     
  12976.     Allows you to view an array of strings in the current window. Works just
  12977.     like ViewTextFile.
  12978.     
  12979.      Example:
  12980.        var New
  12981.        ReadTextFile ('MARXREAD.ME',New)
  12982.        DrawBox 1 2 80 23
  12983.        ViewArray New
  12984.     
  12985.     See Also: ViewTextFile
  12986.     
  12987.  
  12988.     Computer Tyme * MarxMenu * Users Manual                 Page #225
  12989.     -----------------------------------------------------------------
  12990.     
  12991.     Category: Display Array
  12992.     
  12993.     
  12994.      ViewTextFile (Name)
  12995.     
  12996.     This command lets you view a text file in the current window.
  12997.     
  12998.      Example:
  12999.        DrawBox 1 2 80 23
  13000.        ViewTextFile 'MARXREAD.ME'
  13001.     
  13002.     See Also: ViewArrayFile
  13003.     
  13004.     Category: Display File
  13005.     
  13006.     
  13007.      VinCheckService (Service) : Number
  13008.     
  13009.     Returns information about the requested service.
  13010.     
  13011.      Services:
  13012.     
  13013.         1 - Communications
  13014.         2 - Primary 3270 Emulation ID
  13015.         3 - Async Terminal Emulation
  13016.         4 - File Deflection
  13017.         5 - BPS
  13018.         6 - Undocumented
  13019.         7 - StreetTalk
  13020.         8 - Environment
  13021.         9 - NetBios
  13022.        10 - Secondary 3270 Emulation ID
  13023.        11 - Semaphore
  13024.        12 - 3270 Emulation Active Status
  13025.        13 - 3270 Keyboard Interrupt Simulator
  13026.        14 - Advanced 3270 SNA
  13027.        15 - Undocumented
  13028.        16 - Undocumented
  13029.     
  13030.      Return Codes:
  13031.         0 - Service is Installed
  13032.         1 - Service is not Installed
  13033.         2 - Invalid Service Number
  13034.     
  13035.     Category: Vines
  13036.     
  13037.  
  13038.     Computer Tyme * MarxMenu * Users Manual                 Page #226
  13039.     -----------------------------------------------------------------
  13040.     
  13041.      VinesInt : Number
  13042.     
  13043.     Returns the interrupt number the Vines software is servicing.
  13044.     
  13045.     Category: Vines
  13046.     
  13047.     
  13048.      VinesLoaded : Boolean
  13049.     
  13050.     VinesLoaded returns True if the Vines shell is loaded.
  13051.     
  13052.     Category: Vines
  13053.     
  13054.     
  13055.      VinUserName : String
  13056.     
  13057.     Returns the StreetTalk name of the person who is logged in.
  13058.     
  13059.     Category: Vines
  13060.     
  13061.     
  13062.      VinSerialNumber (Drive) : Number
  13063.     
  13064.     Returns the Vines serial number on the server that the drive letter
  13065.     references.
  13066.     
  13067.      Example:
  13068.        Writeln VinSerialNumber ('Z')
  13069.     
  13070.     Category: Vines
  13071.     
  13072.     
  13073.      Volume (drive)
  13074.     
  13075.     Returns the volume label of the specified drive.
  13076.     
  13077.      Example:
  13078.        Writeln Volume 'C'   ;volume label on drive C
  13079.     
  13080.     Category: System
  13081.     
  13082.     
  13083.      Wait (number)
  13084.     
  13085.     Delay for a number of 1/100 seconds. Wait 250 delays 2 1/2 seconds.
  13086.     
  13087.     If you are running a multi-tasker like Windows 3 or DesqView, and the
  13088.     delay is over 1/4 second, MarxMenu will release time slices back to DOS
  13089.     and not bog down the CPU power on long waits. MarxMenu also releases CPU
  13090.     cycles while idle at the keyboard.
  13091.     
  13092.      Example:
  13093.        Wait 300   ;3 second delay
  13094.     
  13095.  
  13096.     Computer Tyme * MarxMenu * Users Manual                 Page #227
  13097.     -----------------------------------------------------------------
  13098.     
  13099.     See Also: WaitOrKbdReady
  13100.     
  13101.     Category: Misc
  13102.     
  13103.     
  13104.      WaitOrKbdReady (Number)
  13105.     
  13106.     This command is just like the WAIT command except the wait is aborted by
  13107.     pressing any key. Time to wait is in hundredths of a second. This
  13108.     command is useful when using MarxMenu to write a running demo.
  13109.     
  13110.      Example:
  13111.        WaitOrKbdReady 300   ;3 second delay or until KeyPress
  13112.     
  13113.     See Also: Wait
  13114.     
  13115.     Category: Keyboard
  13116.     
  13117.     
  13118.      WhereX : Number
  13119.     
  13120.     Returns the horizontal position of the cursor within the current window.
  13121.     
  13122.     Category: Display
  13123.     
  13124.     
  13125.      WhereXAbs : Number
  13126.     
  13127.     Returns the horizontal screen position of the cursor.
  13128.     
  13129.     Category: Display
  13130.     
  13131.     
  13132.      WhereY : Number
  13133.     
  13134.     Returns the vertical position of the cursor within the current window.
  13135.     
  13136.     
  13137.      WhereYAbs : Number
  13138.     
  13139.     Returns the vertical screen position of the cursor.
  13140.     
  13141.     Category: Display
  13142.     
  13143.     
  13144.      While
  13145.     
  13146.     Used for program control. Usage:
  13147.     
  13148.      WHILE (condition)
  13149.         (statement)
  13150.         (statement)
  13151.      ENDWHILE
  13152.     
  13153.  
  13154.     Computer Tyme * MarxMenu * Users Manual                 Page #228
  13155.     -----------------------------------------------------------------
  13156.     
  13157.     Execution stays in the while loop as long as the condition is true.
  13158.     
  13159.     See Also: EndWhile
  13160.     
  13161.     Category: Conditional
  13162.     
  13163.     
  13164.      WholeFileNames (On/Off)
  13165.     
  13166.     Controls if ReadDirectory will return the whole name and path or just
  13167.     the filename part.
  13168.     
  13169.      Example:
  13170.        Var X
  13171.        WholeFileNames Off          ;Just filename, no paths!
  13172.        ReadDirectory('*.MNU',X)
  13173.        Loop X
  13174.           Execute ('COPY ' + X[LoopIndex] + ' A:')
  13175.        EndLoop
  13176.     
  13177.     See Also: ReadDirectory
  13178.     
  13179.     Category: File Directory
  13180.     
  13181.     
  13182.      Window (X,Y,Width,Height)
  13183.     
  13184.     Window changes the size of the active area of the screen. It can be used
  13185.     to either reduce or expand where text can be written.
  13186.     
  13187.     See Also: DrawBox
  13188.     
  13189.     Category: Display
  13190.     
  13191.     
  13192.      WindowHeight : Number
  13193.     
  13194.     Returns number of rows in current window.
  13195.     
  13196.     Category: Display
  13197.     
  13198.     
  13199.      WindowWidth : Number
  13200.     
  13201.     Returns number of columns in current window.
  13202.     
  13203.     Category: Display
  13204.     
  13205.  
  13206.     Computer Tyme * MarxMenu * Users Manual                 Page #229
  13207.     -----------------------------------------------------------------
  13208.     
  13209.      WinX : Number
  13210.     
  13211.     Returns the horizontal location of the left hand corner of the window.
  13212.     
  13213.     See Also: WinY
  13214.     
  13215.     Category: Display
  13216.     
  13217.     
  13218.      WinY : Number
  13219.     
  13220.     Returns the vertical location of the left hand corner of the window.
  13221.     
  13222.     See Also: WinX
  13223.     
  13224.     Category: Display
  13225.     
  13226.     
  13227.      WordStarKeys (On/Off)
  13228.     
  13229.     In the early days of MarxMenu I mapped many of the cursor movement keys
  13230.     to match the WordStar key strokes. Now you can turn this off to get the
  13231.     real scan codes from the arrow keys.
  13232.     
  13233.     See Also: Readln
  13234.     
  13235.     Category: String
  13236.     
  13237.     
  13238.      WorkString : String
  13239.     
  13240.     WorkString is a MarxMenu variable that contains the string that Readln
  13241.     is editing. This string can be accessed by KeyEvent routines so that a
  13242.     KeyEvent procedure can set what is being entered.
  13243.     
  13244.      Example:
  13245.        WorkString = PickOne(List)
  13246.     
  13247.     See Also: KeyEvent
  13248.     
  13249.     Category: String
  13250.     
  13251.     
  13252.      Write (string)
  13253.     
  13254.     Writes (string) on the screen at the current cursor position.
  13255.     
  13256.      Example:
  13257.        Write ' - Heading - '
  13258.     
  13259.     Category: Display
  13260.     
  13261.  
  13262.     Computer Tyme * MarxMenu * Users Manual                 Page #230
  13263.     -----------------------------------------------------------------
  13264.     
  13265.      WriteAscTextFile (File,2DArray)
  13266.     
  13267.     WriteAscTextFile writes a two dimensional array to a comma delimited
  13268.     ascii text file.
  13269.     
  13270.     Category: File
  13271.     
  13272.     
  13273.      WriteCenter (string)
  13274.     
  13275.     Writes (string) centered in current window.
  13276.     
  13277.     Category: Display
  13278.     
  13279.     
  13280.      WriteError (String)
  13281.     
  13282.     This command works just like Write except that it writes to the DOS
  13283.     error device handle. This can be used to put messages on the screen when
  13284.     the output is redirected to a file.
  13285.     
  13286.     See Also: WritelnError
  13287.     
  13288.     Category: Display
  13289.     
  13290.     
  13291.      WriteFileBlock (Name,Offset,Size,Segment)
  13292.     
  13293.     WriteFileBlock writes disk file Name starting at byte Offset for Size
  13294.     bytes from memory buffer Segment. It is intended to write any kind of
  13295.     file. If the file doesn't exist, it is created.
  13296.     
  13297.     The maximum value for Size is 65504. The segment must be as large as the
  13298.     number of bytes you are writing.
  13299.     
  13300.     See Also: ReadFileBlock GetMem FreeMem
  13301.     
  13302.     Category: File Memory
  13303.     
  13304.     
  13305.      Writeln (string)
  13306.     
  13307.     Writes (string) on the screen followed by a CR-LF (carriage
  13308.     return-line feed).
  13309.     
  13310.      Example:
  13311.        Writeln 'The time is: ' TimeString
  13312.     
  13313.     Category: Display
  13314.     
  13315.  
  13316.     Computer Tyme * MarxMenu * Users Manual                 Page #231
  13317.     -----------------------------------------------------------------
  13318.     
  13319.      WritelnAsc (File,Array)
  13320.     
  13321.     WritelnAsc writes 1 line to the end of a comma delimited ascii text
  13322.     file. Each element of the array becomes one field of that line.
  13323.     
  13324.      Example:
  13325.        var A
  13326.        A[1] = 'MARC PERKEL'
  13327.        A[2] = 'ONION'
  13328.        A[3] = 37
  13329.        WritelnAsc('TEST.TXT',A)
  13330.        ;appends "MARC PERKEL","ONION",37 to file TEST.TXT
  13331.     
  13332.     Category: File
  13333.     
  13334.     
  13335.      WritelnError (String)
  13336.     
  13337.     This command works just like Writeln except that it writes to the DOS
  13338.     error device handle. This can be used to put messages on the screen when
  13339.     the output is redirected to a file.
  13340.     
  13341.     See Also: WriteError
  13342.     
  13343.     Category: Display
  13344.     
  13345.     
  13346.      WriteTextFile (FileName,Array)
  13347.     
  13348.     This command writes a string array to a text file. Do not use FileCreate
  13349.     of any other file commands with this. This command does it all.
  13350.     
  13351.      Example:
  13352.        var X
  13353.        ReadTextFile('MARXREAD.ME',X)
  13354.        WriteTextFile('A:MARXREAD.ME',X)  ;copies file to A:
  13355.     
  13356.     See Also: ReadTextFile
  13357.     
  13358.     Category: File Array
  13359.     
  13360.     
  13361.      WriteVertical (string)
  13362.     
  13363.     Writes (string) vertically on the screen from the current cursor
  13364.     position.
  13365.     
  13366.      Example:
  13367.        WriteVertical( 'Hello' )
  13368.     
  13369.          ;This would display
  13370.            H
  13371.            e
  13372.            l
  13373.            l
  13374.            o
  13375.     
  13376.  
  13377.     Computer Tyme * MarxMenu * Users Manual                 Page #232
  13378.     -----------------------------------------------------------------
  13379.     
  13380.     Category: Display
  13381.     
  13382.     
  13383.      Xor : Operator
  13384.     
  13385.     Returns logical Xor if operators are boolean; or bitwise Xor if
  13386.     operators are numeric.
  13387.     
  13388.     Xor (exclusive or) means on or the other but not both can be true.
  13389.     
  13390.      Example:
  13391.        A = True
  13392.        B = False
  13393.        A Xor B    ;returns true
  13394.     
  13395.     See Also: And Or Not
  13396.     
  13397.     Category: Math Boolean
  13398.     
  13399.     
  13400.      Year : Number
  13401.     
  13402.     Returns current Year.
  13403.     
  13404.      Example:
  13405.        Writeln Year    ;returns 1993
  13406.     
  13407.     Category: Time
  13408.     
  13409.     
  13410.      YearOf (Date) : Number
  13411.     
  13412.     Returns the year of a date. If Date is passed as a string it is
  13413.     converted automatically.
  13414.     
  13415.      Example:
  13416.        Writeln YearOf Today    ;returns 1993
  13417.     
  13418.     See Also: TimeOf BadDate
  13419.     
  13420.     Category: Time
  13421.     
  13422.     
  13423.      STRING CONSTANTS
  13424.     
  13425.        F1   = #0#59   SF1  = #0#84   CF1  = #0#94   AF1  = #0#104
  13426.        F2   = #0#60   SF2  = #0#85   CF2  = #0#95   AF2  = #0#105
  13427.        F3   = #0#61   SF3  = #0#86   CF3  = #0#96   AF3  = #0#106
  13428.        F4   = #0#62   SF4  = #0#87   CF4  = #0#97   AF4  = #0#107
  13429.        F5   = #0#63   SF5  = #0#88   CF5  = #0#98   AF5  = #0#108
  13430.        F6   = #0#64   SF6  = #0#89   CF6  = #0#99   AF6  = #0#109
  13431.        F7   = #0#65   SF7  = #0#90   CF7  = #0#100  AF7  = #0#110
  13432.        F8   = #0#66   SF8  = #0#91   CF8  = #0#101  AF8  = #0#111
  13433.        F9   = #0#67   SF9  = #0#92   CF9  = #0#102  AF9  = #0#112
  13434.        F10  = #0#68   SF10 = #0#93   CF10 = #0#103  AF10 = #0#113
  13435.        F11  = #0#133  SF11 = #0#135  CF11 = #0#137  AF11 = #0#139
  13436.        F12  = #0#134  SF12 = #0#136  CF12 = #0#138  AF12 = #0#140
  13437.     
  13438.  
  13439.     Computer Tyme * MarxMenu * Users Manual                 Page #233
  13440.     -----------------------------------------------------------------
  13441.     
  13442.        ALT1 = #0#120  BKSP = #8
  13443.        ALT2 = #0#121  CR   = #13
  13444.        ALT3 = #0#122  CRLF = #13#10
  13445.        ALT4 = #0#123  ESC  = #27
  13446.        ALT5 = #0#124  FF   = #12
  13447.        ALT6 = #0#125  LF   = #10
  13448.        ALT7 = #0#126
  13449.        ALT8 = #0#127
  13450.        ALT9 = #0#128
  13451.        ALT0 = #0#129
  13452.     
  13453.        Key              Scan     WordStar
  13454.        ----------------------------------
  13455.        UpArrow        = #0#72    ^E
  13456.        DownArrow      = #0#80    ^X
  13457.        LeftArrow      = #0#75    ^S
  13458.        RightArrow     = #0#77    ^D
  13459.        HomeKey        = #0#71    ^W
  13460.        EndKey         = #0#79    ^Z
  13461.        CtrlLeftArrow  = #0#115   ^A
  13462.        CtrlRightArrow = #0#116   ^F
  13463.        PgUpKey        = #0#73    ^R
  13464.        PgDnKey        = #0#81    ^C
  13465.        InsKey         = #0#82    ^V
  13466.        DelKey         = #0#83    ^G
  13467.     
  13468.     Category: Constants
  13469.     
  13470.     
  13471.      TIME AND DATE CONSTANTS
  13472.     
  13473.        Jan = 1        Sun = 0
  13474.        Feb = 2        Mon = 1
  13475.        Mar = 3        Tue = 2
  13476.        Apr = 4        Wed = 3
  13477.        May = 5        Thu = 4
  13478.        Jun = 6        Fri = 5
  13479.        Jul = 7        Sat = 6
  13480.        Aug = 8
  13481.        Sep = 9        SecondsInHour = 3600
  13482.        Oct = 10       SecondsInDay  = 86400
  13483.        Nov = 11
  13484.        Dec = 12
  13485.     
  13486.     Category: Constants
  13487.     
  13488.  
  13489.     Computer Tyme * MarxMenu * Users Manual                 Page #234
  13490.     -----------------------------------------------------------------
  13491.     
  13492.      VIDEO CONSTANTS
  13493.     
  13494.      Video Modes:   Display Types:
  13495.     
  13496.        BW40 = 0       0 = HercMono
  13497.        CO40 = 1       1 = CGA
  13498.        BW80 = 2       2 = MCGA
  13499.        CO50 = 3       3 = EGA
  13500.        MONO = 7       4 = VGA
  13501.     
  13502.     Category: Constants
  13503.     
  13504.     
  13505.      COLOR CONSTANTS
  13506.     
  13507.        Black   = 0    DGrey    = 8
  13508.        Blue    = 1    LBlue    = 9
  13509.        Green   = 2    LGreen   = 10
  13510.        Cyan    = 3    LCyan    = 11
  13511.        Red     = 4    LRed     = 12
  13512.        Magenta = 5    LMagenta = 13
  13513.        Brown   = 6    Yellow   = 14
  13514.        Grey    = 7    White    = 15
  13515.     
  13516.     Category: Constants
  13517.     
  13518.     
  13519.      BOOLEAN CONSTANTS
  13520.     
  13521.        True    Yes    On
  13522.        False   No     Off
  13523.     
  13524.     Category: Constants
  13525.     
  13526.